私はヘルペスダーピーの瞬間を過ごしています。私はこれがうまくいったと断言できた:
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」であり、例外ではありません。
モジュールは別のモジュールのメソッドを上書きできますが、クラスで直接定義されているメソッドは上書きできませんか?
私はこれを回避する方法を知っていますが、奇妙だと思いました。