2017-07-17 67 views
1

如果我有一个班级,是否有办法赶上密钥访问事件?对象的Ruby访问'键'?

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']]