From: "ddfznt (Ederson Fuzinato)" <noreply@...> Date: 2022-03-08T21:52:59+00:00 Subject: [ruby-core:107799] [Ruby master Feature#18617] Allow multiples keys in Hash#[] acting like Hash#dig Issue #18617 has been reported by ddfznt (Ederson Fuzinato). ---------------------------------------- Feature #18617: Allow multiples keys in Hash#[] acting like Hash#dig https://bugs.ruby-lang.org/issues/18617 * Author: ddfznt (Ederson Fuzinato) * Status: Open * Priority: Normal ---------------------------------------- # Abstract Since is very common the hash nested hashes, expecialy in the API world, I whold love to use Hash#[] syntax as alias for Hash#dig. # Background Since a start to learn ruby, Hashes are the most powerful structure I can use to build API. It's intuitive and concise way to represent data. But something always make me unconfortable, the excess of square brackets([]) to access nested data. Everytime is a "nasty", to access things like ``` ruby purchase[:customer][:addresses][:delivery][:street] ``` even worse when data is missing anypoint. So, I meet the Hash#dig. Wonderful, easy, and powerful as well. But .dig is not so intuitive, and I think, why not use the most common way to access data with multiple keys. Why not use the most powerful method, with all powerfulness. Why limitate Hash#[] to one single param. :( # Proposal So, my proposal is to allow Hash#[] to take undefinily params, and act like .dig, more concise to access nested data, more powerful, more happy :D. **Stop:** ``` ruby hash[:a][:b][:c][:d][:e][:f][:u] ``` **Just:** ``` ruby hsh[:a, :b, :c, :d, :e, :lov, :u] ``` # Implementation Since Hash#[] and Hash.dig, both calling Hash::new when key is not found, just check the arity for performance. Currently, I use something like: ``` ruby module AwesoneAccess def [] *keys if keys.many? dig *keys else super end end end class Hash prepend AwesoneAccess end a = {foo: {bar: :baz}} # => { foo: { bar: :baz } a[:foo][:bar] == a[:foo, :bar] # => true ``` # Evaluation It'll be awesome. (������������)���*:��������� ���������: *���(������������) # Discussion I would love listen you guys. Sincerely...���_��� # Summary Faces by [[textfac.es]] ?! -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>