gpt4 book ai didi

ruby - 继承 Hash 时的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:36 25 4
gpt4 key购买 nike

我正在尝试继承 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当在散列中找不到该值时。但是,当找不到 key 时,我的散列最终返回了 server 对象,就好像我已经使用 Hash.new(server) 创建了我的散列一样!

如何避免这种行为?任何帮助将不胜感激!

最佳答案

在您的 PlayerCollection 中,您应该覆盖 Hash#initialize 而不是 Hash#new

new 没有被调用。这是被调用的类方法 Hash.new(或 PlayerCollection.new)。

关于ruby - 继承 Hash 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15667349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com