$B$^$D$b$H(B $B$f$-$R$m$G$9(B
Module#mix$B$,F3F~$5$l$^$7$?!#$^$"!"$=$N$3$H$=$N$b$N$K$O;?@.$J(B
$B$N$G$9$,!"$5$i$K;EMM$r5M$a$J$$$H$$$1$J$$$h$&$J5$$,$7$F$$$kIt(B
$BJ,$,$"$j$^$9!#;EMM$K$D$$$F8@5Z$7$?;d$N%V%m%0$G$b$9$G$K=R$Y$i(B
$B$l$F$$$^$9!#(B
($B0zMQ(B)
mix$B$5$l$k%b%8%e!<%k$,JL$N%b%8%e!<%k$r(Binclude$B$7$F$$$?>l9g$K(B
$B$O$I$&$J$k$+!#(B
$B$*$=$i$/$ONc30$K$J$k!#(Bmix$B$H(Binclude$B$O:.$<$k$Y(B
$B$-$G$O$J$$!#(B
$B8=:$N<BAu$G;n$7$F$$^$7$g$&!#(B
module Foo
def m
end
end
module Bar
include Foo
end
class Baz
mix Bar
end
p Baz.new.m
m$B$,(BNoMethodError$B$K$J$j$^$9!#$D$^$j!"8=>u(BBar$B$O(BFoo$B$r%$%s%/%k!<(B
$B%I$7$F$$$k$K$b4X$o$i$:!"L5;k$5$l$F$$$k$o$1$G$9$M!#$3$l$O%(%i!<(B
$B$K$J$k$Y$-$G$7$g$&!#(B
($B0zMQ(B)
mix$B$GJLL>$rIU$1$FLdBj2r7h!"$HFI$a$k$h$&$J8@$$J}$r$7$F$$$k$,!"(B
$B<B:]$K$O%b%8%e!<%kFbIt$GL>A0$r=q$-49$($kA0$N%a%=%C%I$rFI$s(B
$B$G$$$k2DG=@-$,$"$k!#(B $B$=$l$r$I$&$9$k$+!#$J$K$b$7$J$$(B($B=EJ#$9(B
$B$kJ}$,0-$$(B)$B$H$9$k9M$($b$"$k$,!"(B $B$=$l$@$H$;$C$+$/6lO+$7$F(B
Traits$B$rF3F~$7$h$&$H$7$F$$$k$N$,(B $B$^$C$?$/L5BL$K$J$k$N$G!“L>(B
$BA0$r=q$-49$($?%a%=%C%I8F$S=P$7$r(B $B%b%8%e!<%k$N%a%=%C%IDj5A<B(B
$BBN$+$iC5$7=P$7$F%a%=%C%I$r%3%T!<$9$k(B $B$H$$$&(B(Bertrand Mayer
$B$N(BOOSC$B$K5-=R$5$l$F$$$?%”%$%G%#%"(B)$B$rF3F~$9$k$3$H$r9M$($k(B
$B$3$l$b;n$7$^$7$g$&!#(B
module Foo
def m
:Foo
end
def x
self.m
end
end
module Bar
def m
:Bar
end
def y
self.m
end
end
class Baz
mix Foo, :m => :m_f
mix Bar, :m => :m_b
end
obj = Baz.new
p obj.x
$B$9$k$H(BFoo#x$B$NCf$G8F$P$l$?(Bm$B$O$9$G$K%j%M!<%$5$l$FB8:_$7$J$$$N(B $B$G%(%i!<$K$J$j$^$9!#$7$+$7!"$3$l$O%$%s%/%k!<%I;~$K%a%=%C%I(Bx$B$N(B $BK\BN$r(B($B%3%T!<$7$?>e$G!K=q$-49$($F!"(Bm$B$NBe$o$j$K%j%M!<%
$5$l$?(B
m_f$B$r8F$V$Y$-$+$b$7$l$^$;$s!#$"$k$$$O!“8=>uDL$j!”$=$s$J$3$H$O(B
$B$7$J$$$H$$$&$N$b$R$H$D$N9M$($G$9!#(B