我正在做一個herp-derpy的時刻。我敢發誓這工作:無法通過包含模塊來重新定義類的實例方法?
module StubbedGreeting
def sayit
puts "StubbedGreeting"
end
end
module RegularGreeting
def sayit
puts "RegularGreeting"
end
end
class Greeting
def sayit
raise "Gotta catch me!"
end
end
class GreetingIncludes
include RegularGreeting
end
begin
Greeting.send(:include, StubbedGreeting)
Greeting.new.sayit
rescue Exception
puts "Exception raised"
end
GreetingIncludes.send(:include, StubbedGreeting)
GreetingIncludes.new.sayit
這裏會發生什麼事是Greeting.new.sayit
導致在rescue
塊被稱爲,無視StubbedGreeting企圖覆蓋。
但是,GreetingIncludes.new.sayit
導致「StubbedGreeting」,不是一個例外。
因此,一個模塊可以覆蓋另一個模塊的方法,但沒有直接在類中定義的方法?
我知道如何擺脫這種困境,我發現它很奇怪。
很好的解釋,謝謝。 –