2011-11-05 8 views

risposta

4

sguardo al ruby documentation for Hash

nuovo → new_hash Fare clic per scegliere fonte
nuovo (obj) → nuovo_hash
nuovo {| hash, chiave | blocco} → new_hash

Restituisce un nuovo hash vuoto. Se a questo hash si accede successivamente da una chiave che non corrisponde a una voce hash, il valore restituito dipende dallo stile del nuovo usato per creare l'hash. Nella prima forma, l'accesso restituisce zero. Se viene specificato obj, questo singolo oggetto verrà utilizzato per tutti i valori predefiniti. Se viene specificato un blocco, verrà chiamato con l'oggetto hash e la chiave e dovrebbe restituire il valore predefinito. È responsabilità del blocco memorizzare il valore nell'hash se necessario. Esempio formare la documentazione

# 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

La differenza è nella gestione dei valori mancanti. In primo luogo si ritorna vuote Array, secondi ritorna 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 

Ecco il link alla documentazione: http://www.ruby-doc.org/core-1.9.3/Hash.html#method-c-new