2017-07-17 1 views
1

クラスがある場合、キーアクセスイベントをキャッチする方法はありますか?オブジェクトのRubyアクセス 'key'?

obj = Example.new 
obj['key'] # is there any way to manually handle this? 

私はmethod_missingを使用し、私は唯一の名前として'[]'を得るが、私は'key'キーワードを得ることはありません。私もHashExample < Hashで継承しようとしましたが、obj['key']は単にnilに解決されます。

答えて

5

それは実際、非常に単純です:

class Example 
    def [](key) 
    p key 
    end 

    def []=(key, value) 
    p [ key, value ] 
    end 
end 

あなたはmethod_missingと同じことを行うことができますが、あなたは一貫してこれらを捕獲しようとしている場合、それはメソッドを定義する方が良いでしょう。

あなたが他の引数を取得行うことができますが、彼らのためにお願いしている場合にのみ注:

def method_missing(name, *args) 
    p [name, args] 
end 

注意をobj['key'][:[], ['key']]

として表示されていること
関連する問題