今天我試了下面的代碼片段,我不明白爲什麼我會在它們之間得到不同的結果。據我所知他們是一樣的。未使用哈希默認值
其中一個使用默認值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]
的Ruby版本1.8.7
我有同樣的問題,前一段時間: http://stackoverflow.com/questions/2552579/ruby-method-array-not-updating-the-array -in-hash – 2010-04-22 15:28:23
我不認爲它們是相同的。如果我嘗試使用塊,就像你一樣,我看不到使用'p a [:key]'輸入的值。但是,默認不是塊,我確實得到了值,但除非我調用特定的鍵,否則它不會顯示。用'a.keys'或'a.value',我得到一個空的'Array'。 似乎是一種將密鑰添加到「哈希」中的方式,無論出於何種原因,這都是好的。 – gaqzi 2010-04-22 15:59:49
對不起,不完全一樣。你已經改變了默認值(嘗試在第一個例子中打印'a [:foo]',你會看到)。我總是從一個空陣列開始。順便說一句,我也問過這一個,似乎更加類似:http://stackoverflow.com/questions/1822021/why-does-hash-new-hide-hash-members – 2010-04-22 16:15:45