【发布时间】:2013-03-18 00:51:28
【问题描述】:
我正在尝试继承 Ruby 的 Hash 以在访问特定键时引入我自己的行为。这在构造时需要一个额外的参数,所以我实现了我的自定义哈希,如下所示:
class PlayerCollection < Hash
def new(server)
@server_player = SpecialPlayer.new(server, "Server")
super(nil)
end
def [](key)
key == "Server" ? @server_player : super(key)
end
def []=(key, value)
key == "Server" ? value : super(key, value)
end
end
如您所见,我调用super 时的值为nil,因为我希望我的哈希值在哈希值中找不到时返回nil。但是,当找不到密钥时,我的哈希最终会返回 server 对象,就好像我已经使用 Hash.new(server) 创建了我的哈希一样!
如何避免这种行为?任何帮助将不胜感激!
【问题讨论】: