2013-03-27 5 views
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 

, 나는, nil의 값을 super를 호출 해요 nil 값이 해시에서 발견되지 않습니다. 그러나 키가 발견되지 않으면 Hash.new(server)으로 해시를 생성 한 것처럼 내 해시가 server 개체를 반환합니다.

이 동작을 어떻게 피할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다!

답변

3

PlayerCollection에서 Hash#new 대신 Hash#initialize을 덮어 써야합니다.

new은 호출되지 않습니다. 호출 된 클래스 메서드 Hash.new (또는 PlayerCollection.new)입니다.

+0

OMG. 당신은 절대적으로 옳습니다. 나는 심지어 깨닫지 않았다. –

+0

OK, 하루 동안 저에게 충분한 커피입니다! 나는 지금 어리 석다. D : –

관련 문제