Actions
Feature #13314
opendig=
Status:
Open
Assignee:
-
Target version:
-
Description
We have Hash#dig
, and when we want to assign a key-value at a deep level, it is tempting to do:
hash.dig(:key1, :key2, :key3, :key4) = "value
when we actually needed to do:
hash.dig(:key1, :key2, :key3)&.[]=(:key4, "value")
I propose a method Hash#dig=
, which should be equivalent to the following:
class Hash
def dig=(*keys, final_key, value)
dig(*keys)&.[](final_key, value)
end
end
Updated by sawa (Tsuyoshi Sawada) over 7 years ago
Was this syntactically not allowed? If so, sorry.
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
Assignment to method call has been a challenge in the last couple of years, but not possible yet,
Updated by Mikr (Mikhail Krainik) over 7 years ago
you can do that, as example
a = {key1: { key2: { key3: { key4: '4' }}}};
a.dig(:key1, :key2, :key3)[:key4] = 4
=> {:key1=>{:key2=>{:key3=>{:key4=>4}}}}
Actions
Like0
Like0Like0Like0Like0