Project

General

Profile

Feature #13314

dig=

Added by sawa (Tsuyoshi Sawada) over 2 years ago. Updated over 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:80150]

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

History

Updated by sawa (Tsuyoshi Sawada) over 2 years ago

Was this syntactically not allowed? If so, sorry.

Updated by nobu (Nobuyoshi Nakada) over 2 years ago

Assignment to method call has been a challenge in the last couple of years, but not possible yet,

#3

Updated by nobu (Nobuyoshi Nakada) over 2 years ago

  • Description updated (diff)

Updated by Mikr (Mikhail Krainik) over 2 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}}}}

Also available in: Atom PDF