我碰到這個解決方案爲代理類the Ruby koans傳來:方法執行時不調用它?
class Proxy
attr_accessor :messages
def initialize(target_object)
@object = target_object
@messages = []
end
def method_missing(method_name, *args, &block)
@messages << method_name
@object.send(method_name, *args, &block)
end
end
我可以通過傳遞另一個類作爲參數創建這個代理類的對象。例如,下面的代碼將導致"Do something"
,而不必鍵入thing.method_missing(:do_thing)
:
class Thing
def do_thing
puts "Doing something."
end
end
thing = Proxy.new(Thing.new)
thing.do_thing
爲什麼在method_missing
代碼執行,甚至無需調用該方法?
你看過'method_missing'的文檔嗎? http://ruby-doc.org/core-2.2.3/BasicObject.html#method-i-method_missing –
P.S.這是一個實例方法,而不是一個類方法。 –
「當obj發送它無法處理的消息時,由Ruby自動調用」。是的,這是完美的,謝謝! –