Ruby の奇妙な点を見つけました。method_missing
/を使用して、カーネルが同じメソッドを定義している場合、失敗しrespond_to_missing?
て開始されたメソッド呼び出しを動的に処理します。__send__
class Testerize
def method_missing(method, *args, &block)
if method == :system
puts 'yay'
else
super
end
end
def respond_to_missing?(method, internal)
return true if method == :system
end
end
t = Testerize.new
puts t.respond_to?(:system)
# Prints true
t.system
# Prints 'yay'
t.__send__(:system)
# Exception: wrong number of arguments (ArgumentError)
Kernel.system
どういうわけか混ざり合っています。ここで何が起こっているか知っている人はいますか?:system
「メッセージ」が Testerize インスタンスに投稿され、ヒットし、出来上がりを期待していたでしょうmethod_missing
。直接呼び出しを使用しているときmethod_missing
に使用すると呼び出されないのはなぜですか?__send__
関連する場合は、Ruby 1.9.3 を使用しています。