2009-04-22 60 views
1

以任何方式可能出现以下情况:我一直跑进奇数列表Hash作为自变量的散列

def thores_hammer(bling) 
    hammer_bling = { bling } 
end 

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

由于提前感谢。

回答

3

你正在运行到一个错误的原因是 Hashthores_hammer方法 被调用是隐式创建 - 所以当你{ 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

魔法!你救了我两次 – rubynewbie 2009-04-23 00:58:20

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中的花括号有几种不同的用法,例如声明块。