1

Hash特定のキーがアクセスされたときの独自の動作を導入するために、Ruby をサブクラス化しようとしています。これには、構築時に追加のパラメーターが必要になるため、次のようにカスタム ハッシュを実装しました。

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するため、値を使用して呼び出しています。ただし、ハッシュを!で作成したかのように、キーが見つからない場合、ハッシュは最終的にオブジェクトを返します。nilnilserverHash.new(server)

この動作を回避するにはどうすればよいですか? どんな助けでも大歓迎です!

4

1 に答える 1

3

では、ではなくPlayerCollection上書きする必要があります。Hash#initializeHash#new

それnewは呼ばれません。呼び出されるのはクラス メソッドHash.new(または) です。PlayerCollection.new

于 2013-03-27T19:12:58.070 に答える