考虑下面的代码:红宝石代表团/代理
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