includeだと
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | module Tiger def eat 'meat' end end class Cow def self.eat 'vegetable' end end class Rabbit end include Tiger #extend Tiger puts "myself(wanna be Tiger) eat #{self.eat}" #=> myself(wanna be Tiger) eat meat puts "Cow eats #{Cow.eat}" #=> Cow eats vegetable puts "Rabbit eats #{Rabbit.eat}" #=> Rabbit eats meat |
ウサギさんが肉を食べてしまいます(Objectが汚染されてます)
excludeだと
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | module Tiger def eat 'meat' end end class Cow def self.eat 'vegetable' end end class Rabbit end #include Tiger extend Tiger puts "myself(wanna be Tiger) eat #{self.eat}" #=> myself(wanna be Tiger) eat meat puts "Cow eats #{Cow.eat}" #=> Cow eats vegetable puts "Rabbit eats #{Rabbit.eat}" #=> `<main>': undefined method `eat' for Rabbit:Class(NoMethodError) |
汚染されません。Objectのインスタンスであるmainの特殊メソッドにのみmixinされたからですね。