From: Robert Klemme Date: 2004-05-31T20:58:37+09:00 Subject: Re: How are mixins better than multiple inheritance? "Georgy" schrieb im Newsbeitrag news:PSyuc.5214$%f3.363257@twister.southeast.rr.com... > Hm, mine outputs "in parent1" > > module Parent1 > def amb_func > puts "in parent1" > end > end > > module Parent2 > def amb_func > puts "in parent2" > end > end > > class Child > include Parent1, Parent2 > end > > Child.new.amb_func #=> in parent1 >> Child.ancestors => [Child, Parent1, Parent2, Object, Kernel] That's why. See: >> module Parent1 >> def amb_func >> puts "in parent1" >> end >> end => nil >> ?> module Parent2 >> def amb_func >> puts "in parent2" >> end >> end => nil >> ?> class Child1 >> include Parent1, Parent2 >> end => Child1 >> ?> class Child2 >> include Parent1 >> include Parent2 >> end => Child2 >> ?> Child1.ancestors => [Child1, Parent1, Parent2, Object, Kernel] >> Child2.ancestors => [Child2, Parent2, Parent1, Object, Kernel] >> Apparently the inclusion sequence differs if you have two separate include statements vs. one statement with two modules. Regards robert > > ___ > Georgy > > "Bill Atkins" wrote in message news:e6056acc.0405251343.550af715@posting.google.com... > | Can anyone explain how Ruby's mixin system is better than regular > | multiple inheritance? What's the difference between: > | > | ---- > | > | module Parent1 > | def amb_func > | puts "in parent1" > | end > | end > | > | module Parent2 > | def amb_func > | puts "in parent2" > | end > | end > | > | class Child > | include Parent1, Parent2 > | end > | > | Child.new.amb_func > | > | ---- > | > | and > | > | ---- > | > | class Parent1 > | def amb_func > | puts "in parent1" > | end > | end > | > | class Parent2 > | def amb_func > | puts "in parent2" > | end > | end > | > | class Child < Parent1, Parent2 > | end > | > | Child.new.amb_func > | > | --- > | > | Aside from the fact that the second example obviously isn't valid > | Ruby, how is the first scenario an improvement over the second? The > | first outputs "in parent2" and I assume the second would as well. Can > | somebody please explain this? > | > | Bill > >