2011-11-05 9 views

Respuesta

4

Mira el ruby documentation for Hash

nueva → new_hash Haga clic para cambiar la fuente
nuevo (obj) → new_hash
nuevo {| hash, clave | bloque} → new_hash

Devuelve un nuevo hash vacío. Si a este hash se accede posteriormente mediante una clave que no corresponde a una entrada hash, el valor devuelto depende del estilo de new utilizado para crear el hash. En la primera forma, el acceso devuelve nil. Si se especifica obj, este único objeto se usará para todos los valores predeterminados. Si se especifica un bloque, se invocará con el objeto hash y la clave, y se devolverá el valor predeterminado. Es responsabilidad del bloque almacenar el valor en el hash si es necesario. Ejemplo formar el docs

# 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 diferencia está en el manejo de valores perdidos. El primero vuelve vacíos Array, el segundo reenvíos 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 

Aquí está el enlace a la documentación: http://www.ruby-doc.org/core-1.9.3/Hash.html#method-c-new

Cuestiones relacionadas