我尝试了以下 ruby 代码,我认为它会将单词长度的哈希返回到具有这些长度的单词。相反,它是空的。
map = Hash.new(Array.new)
strings = ["abc","def","four","five"]
strings.each do |word|
map[word.length] << word
end
但是,如果我将其修改为
map = Hash.new
strings = ["abc","def","four","five"]
strings.each do |word|
map[word.length] ||= []
map[word.length] << word
end
它确实有效。
第一个版本不只是创建一个默认值为空数组的哈希吗?在这种情况下,我不明白为什么 2 个块给出不同的值。