Я попробовал следующий код 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 блока дают разные значения.