2009-04-22 8 views
1

다음 중 어떤 방법으로 가능합니까? 해시 번호가 홀수로 계속 표시됩니다.def 인수로 해시

def thores_hammer(bling) 
    hammer_bling = { bling } 
end 

thores_hammer :rubys => 5, 
       :emeralds => 5, 
       :souls => 333 

감사합니다.

답변

3

를 오류로 실행중인 이유는 thores_hammer 방법 가 호출 될 때 Hash가 암시 적으로 만들어집니다 - 당신은 { bling }을 수행 할 때 그래서 당신은 해시를 만드는 하나의 키 (자체가 해시 임) 및 값 없음. 따라서 오류가 발생했습니다.

당신이 중괄호를 삭제하기 만하면됩니다 :

irb> def thores_hammer(bling) 
     hammer_bling = bling 
    end 
#=> nil 
irb> thores_hammer :rubys => 5, 
        :emeralds => 5, 
        :souls => 333 
#=> {:rubys=>5, :emeralds=>5, :souls=>333} 
+0

Magic! 당신이 두 번 나를 구해주었습니다 – rubynewbie

+1

나는 메신저로 더 많은 시간을 보내고 있다고 생각합니다. – rubynewbie

1

이 시도 :

def thores_hammer(bling) 
    hammer_bling = bling 
end 

thores_hammer Hash[:rubys => 5, :emeralds => 5, :souls => 333] 
2

당신이 할하려는 할 수있다하는 것은 할 수있는 해시의 복사본을 만들 것입니다 같은 :

def thores_hammer(bling) 
    hammer_bling = bling.dup 
end 

이 오랫동안 해시를 사용하려는 경우 복사본을 만드는 것이 좋습니다. 다른 방법으로 사용할 수 있기 때문에 복사본을 수정하는 것이 좋은 방법인지 확실하지 않습니다.

또한 블록 선언과 같이 Ruby에서 중괄호에 여러 가지 용도가 있습니다.