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されたからですね。