1

我正在尝试对 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)!创建了我的哈希一样。

我怎样才能避免这种行为?任何帮助,将不胜感激!

4

1 回答 1

3

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

new不叫。它是被调用的类方法Hash.new(或)。PlayerCollection.new

于 2013-03-27T19:12:58.070 回答