Ponieważ skróty nie są z natury uporządkowane, nie istnieje pojęcie dołączania. Jednak skróty Ruby od wersji 1.9 utrzymują kolejność reklam. Oto sposoby dodawania nowych par klucz / wartość.
Najprostszym rozwiązaniem jest
h[:key] = "bar"
Jeśli chcesz metodę, użyj store
:
h.store(:key, "bar")
Jeśli naprawdę chcesz użyć operatora „łopata” ( <<
), w rzeczywistości jest on dołączany do wartości skrótu jako tablica i musisz określić klucz:
h[:key] << "bar"
Powyższe działa tylko wtedy, gdy istnieje klucz. Aby dołączyć nowy klucz, musisz zainicjować skrót wartością domyślną, co możesz zrobić w następujący sposób:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Możesz ulec pokusie, aby małpa łatać Hash, aby dołączyć operatora łopaty, który działa w sposób, w jaki napisałeś:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Jednak to nie dziedziczy „cukru syntaktycznego” stosowanego do operatora łopaty w innych kontekstach:
h << :key, "bar"
h.<< :key, "bar"
h[:key] = "bar"
?