了解哈希创建

时间:2016-04-30 10:32:33

标签: ruby

我是Ruby的新手,我正在尝试理解以下哈希创建:

hash = Hash.new { |hash, key| hash[key] = [] }

我该如何解读?语法(块的内容)对我来说还不清楚。

1 个答案:

答案 0 :(得分:2)

Hash.new - 你正在调用Hash的构造函数

{ |hash, key| hash[key] = [] } - 您正在将此块传递给构造函数。这个块对Hash说:当你遇到一个未知的密钥时,创建一个新的密钥/值对,用该密钥作为密钥,新分配的空数组作为值。

hash = - 您正在为此变量分配新哈希。但是不要使用hash作为变量名!它已经是每个对象的类的名称,其类的子类为Object

还有一个更简单的表示法:

Hash.new([])

但这很少是你想要的,因为a)对不存在的键的所有引用将共享同一个数组,并且b)它不会导致创建任何键/值对:

2.3.0 :001 > h = Hash.new([])
 => {}
2.3.0 :002 > h[:a] << 1
 => [1]
2.3.0 :003 > h[:b]
 => [1]
2.3.0 :004 > h.keys.include? :a
 => false
2.3.0 :005 > h.keys
 => []

关于|hash, key|的语法,该片段与方法的带括号的参数列表具有完全相同的目的,例如,以下代码中的(hash, key)

def f(hash, key)
  hash[key] = []
end