Оскільки хеші за своєю суттю не впорядковані, немає поняття додавання. Однак хеші Ruby з 1.9 підтримують порядок вставки. Ось способи додавання нових пар ключ / значення.
Найпростішим рішенням є
h[:key] = "bar"
Якщо ви хочете метод, використовуйте store
:
h.store(:key, "bar")
Якщо ви дійсно, дуже хочете використовувати оператор "лопата" ( <<
), він фактично додається до значення хешу як масиву, і ви повинні вказати ключ:
h[:key] << "bar"
Вищевказане працює лише тоді, коли ключ існує. Щоб додати новий ключ, вам потрібно ініціалізувати хеш значенням за замовчуванням, що можна зробити так:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
У вас може виникнути спокуса виправити мавпу Hash, щоб включити оператор лопати, який працює так, як ви написали:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Однак це не успадковує "синтаксичний цукор", що застосовується до оператора лопати в інших контекстах:
h << :key, "bar"
h.<< :key, "bar"
h[:key] = "bar"
?