Сегодня я попробовал следующие фрагменты кода, и я не понимаю, почему я получаю разные результаты между ними. Насколько я понимаю, они одинаковые.
Один использует значение по умолчанию off Hash
, а другой фрагмент создает пустой массив для ключа, прежде чем он будет доступен.
Кто-нибудь понимает, что происходит? :)
# Hash default if the key doesn't have a value set is an empty Array
a = Hash.new([])
a[:key] << 2 # => [2]
p a # => {} nil
p a[:key] # => [2]
p a.keys # => []
p a.values # => []
# Explicitly add an array for all nodes before creating
b = Hash.new
b[:key] ||= []
b[:key] << 2 # => [2]
p b # => {:key=>[2]}
p b.keys # => [:key]
Руби версии 1.8.7
p a[:key]
. Но поскольку по умолчанию это не блок, я получаю значение, но оно не отображается, пока я не вызову конкретный ключ. Сa.keys
илиa.value
я получаю пустойArray
обратно. Похоже на способ добавить секретные ключи кHash
, по какой-то причине это было бы хорошо. - person gaqzi   schedule 22.04.2010a[:foo]
в первом примере, и вы увидите). Я всегда начинаю с пустого массива. Кстати, я спрашивал также об этом, кажется, еще более похожим: хешировать новые скрыть хеш-члены"> stackoverflow.com/questions/1822021/ - person Mladen Jablanović   schedule 22.04.2010