2011-11-05 51 views

回答

4

看那ruby documentation for Hash

新→new_hash點擊展開源
new(obj)→new_hash
new {| hash,key |塊}→new_hash

返回一個新的空的散列。如果隨後通過與哈希條目不對應的鍵訪問此哈希,則返回的值取決於用於創建哈希的新樣式。在第一種形式中,訪問返回nil。如果指定obj,則此單個對象將用於所有默認值。如果指定了一個塊,將使用散列對象和鍵調用它,並返回默認值。如果需要,塊的責任是將值存儲在哈希中。 實施例形成的文檔

# While this creates a new default object each time 
h = Hash.new { |hash, key| hash[key] = "Go Fish: #{key}" } 
h["c"]   #=> "Go Fish: c" 
h["c"].upcase! #=> "GO FISH: C" 
h["d"]   #=> "Go Fish: d" 
h.keys   #=> ["c", "d"] 
4

區別在於處理缺失的值。第一個返回空Array,第二返回nil

irb(main):001:0> a = Hash.new {|h,k| h[k] = [] } 
=> {} 
irb(main):002:0> b = Hash.new 
=> {} 
irb(main):003:0> a[123] 
=> [] 
irb(main):004:0> b[123] 
=> nil 

這裏是鏈接到文件:http://www.ruby-doc.org/core-1.9.3/Hash.html#method-c-new