考慮下面的代碼:紅寶石代表團/代理
class ArrayProxy < BasicObject
def initialize
@array = []
end
def foo
puts 'foo'
end
def method_missing(*args, &block)
@array = @array.send(*args, &block)
end
def self.method_missing(*args, &block)
new.send(*args, &block)
end
end
爲什麼調用「富」被委託給數組?
ruby-1.9.2-p290 :018 > ArrayProxy.new << 1
=> [1]
ruby-1.9.2-p290 :019 > ArrayProxy << 1
=> [1]
ruby-1.9.2-p290 :020 > ArrayProxy.new.foo
foo
=> nil
ruby-1.9.2-p290 :021 > ArrayProxy.foo
NoMethodError: undefined method `foo' for []:Array
在代碼中嘗試'__send__'。這可能會做到。 – Linuxios 2011-12-26 19:01:52
這樣做,從文檔'您可以使用__send__如果名稱發送衝突與obj中的現有方法'。但'foo'不是Object中的方法嗎?有人可以澄清接受的答案嗎? – Chris 2011-12-26 19:06:03
順便說一句,爲什麼你重新分配'@ array'內'method_missing'? – 2011-12-26 19:22:29