我是Ruby的新手,我正在尝试理解以下哈希创建:
hash = Hash.new { |hash, key| hash[key] = [] }
我该如何解读?语法(块的内容)对我来说还不清楚。
答案 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