Dado que los hash no están ordenados de forma inherente, no existe la noción de agregar. Sin embargo, los hashes de Ruby desde 1.9 mantienen el orden de inserción. Estas son las formas de agregar nuevos pares clave / valor.
La solucion mas simple es
h[:key] = "bar"
Si quieres un método, usa store
:
h.store(:key, "bar")
Si realmente desea utilizar un operador de "pala" ( <<
), en realidad se agrega al valor del hash como una matriz, y debe especificar la clave:
h[:key] << "bar"
Lo anterior solo funciona cuando existe la clave. Para agregar una nueva clave, debe inicializar el hash con un valor predeterminado, lo que puede hacer así:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Es posible que tenga la tentación de parchear Hash para incluir un operador de pala que funcione de la manera que ha escrito:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Sin embargo, esto no hereda el "azúcar sintáctico" aplicado al operador de pala en otros contextos:
h << :key, "bar"
h.<< :key, "bar"
h[:key] = "bar"
?