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
はなぜ「foo」での呼び出しは、アレイに委任されていますか? method_missing
ため
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
これは、ドキュメントから行いました。名前がobj内の既存のメソッドと衝突する場合、__send__を使用できます。 'しかし、 'foo'はObjectのメソッドではありませんか?誰かが受け入れられた答えを明確にすることができますか? – Chris
Btw、なぜ '@ array'を' method_missing'の中に割り当てますか? –