【问题标题】:Weird behavior when subclassing Hash子类化哈希时的奇怪行为
【发布时间】: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) 创建了我的哈希一样!

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

【问题讨论】:

    标签: ruby subclass


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我一天的咖啡就够了!我现在觉得很傻 D:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多