次のルビーコードを試してみました。これは、単語の長さのハッシュをそれらの長さの単語に返すと思いました。代わりにそれは空です。
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つのブロックが異なる値を与える理由がわかりません。