hash作为def参数

时间:2009-04-22 20:26:03

标签: ruby hash function

以下是否有可能?我一直跑进哈希的奇数列表

def thores_hammer(bling)
  hammer_bling = { bling }
end

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

你遇到错误的原因是 Hash方法隐式创建thores_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}

答案 1 :(得分:2)

你可能打算做的是复制哈希,可以这样做:

def thores_hammer(bling)
  hammer_bling = bling.dup
end

如果您打算长时间使用Hash并且不确定是否修改了该方法,那么制作副本可能是一个好主意,因为它可以被使用在其他地方。

此外,Ruby中的花括号有几种不同的用法,例如声明块。

答案 2 :(得分:1)

试试这个:

def thores_hammer(bling)
  hammer_bling = bling
end

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