h = {
data: {
user: {
value: "John Doe"
}
}
}
Aby przypisać wartość do zagnieżdżonego hasha, możemy użyćBezpiecznie przypisać wartości do zagnieżdżonych hash za pomocą krzyżyka # dig lub Lonely operator (&).
h[:data][:user][:value] = "Bob"
Jednakże jeżeli jakakolwiek część w środku brakuje , spowoduje to błąd.
Coś
h.dig(:data, :user, :value) = "Bob"
nie będzie działać, ponieważ nie ma Hash#dig=
jeszcze dostępne.
Aby bezpiecznie przypisać wartość, możemy zrobić
h.dig(:data, :user)&.[]=(:value, "Bob") # or equivalently
h.dig(:data, :user)&.store(:value, "Bob")
Ale czy istnieje lepszy sposób to zrobić?
Na co warto, to zostało omówione tutaj (i odrzucone przez Matza (na razie): https://bugs.ruby-lang.org/issues/11747 –