Vì các hàm băm vốn dĩ không được sắp xếp theo thứ tự, nên không có khái niệm thêm vào. Tuy nhiên, các hàm băm của Ruby kể từ 1.9 vẫn duy trì thứ tự chèn. Dưới đây là các cách để thêm các cặp khóa / giá trị mới.
Giải pháp đơn giản nhất là
h[:key] = "bar"
Nếu bạn muốn một phương pháp, hãy sử dụng store
:
h.store(:key, "bar")
Nếu bạn thực sự, thực sự muốn sử dụng toán tử "shovel" ( <<
), thì nó thực sự đang thêm vào giá trị của hàm băm dưới dạng một mảng và bạn phải chỉ định khóa:
h[:key] << "bar"
Điều trên chỉ hoạt động khi khóa tồn tại. Để thêm một khóa mới, bạn phải khởi tạo hàm băm với một giá trị mặc định, bạn có thể làm như sau:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Bạn có thể bị cám dỗ để Băm vá khỉ để bao gồm một toán tử xẻng hoạt động theo cách bạn đã viết:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Tuy nhiên, điều này không kế thừa "cú pháp đường" được áp dụng cho toán tử xẻng trong các ngữ cảnh khác:
h << :key, "bar"
h.<< :key, "bar"
h[:key] = "bar"
?