
Issue #20738 has been updated by ursm (Keita Urashima). Eregon (Benoit Daloze) wrote in #note-8:
I don't think it's very frequent to need this to warrant a syntax change either.
There are several Rails codes that can be improved with this feature. In my opinion, it is especially useful in multiple situations, such as generating JSON responses and constructing HTTP request headers. It would be more useful if it could be applied to keyword arguments as well. - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... - https://github.com/rails/rails/blob/6d1252cf3e65a7720aad5511ff719b44e49fd2a3... ---------------------------------------- Feature #20738: Removing a specific entry from a hash literal https://bugs.ruby-lang.org/issues/20738#change-109781 * Author: ursm (Keita Urashima) * Status: Open ---------------------------------------- Sometimes I want to decide whether or not to add a particular entry to a hash depending on a condition. If the entire hash does not use nil, I can use Hash#compact. ```ruby { foo: 1, bar: bar? ? 2 : nil }.compact ``` But if I want to remove only a specific entry while leaving the other nil, it is somewhat cumbersome. I have to either assign the hash once and change it destructively, or use Hash#reject. ``` ruby h = { foo: 1, baz: nil } h[:bar] = 2 if bar? ``` ``` ruby { foo: 1, bar: bar? ? 2 : :drop, baz: nil }.reject {|_, v| v == :drop } ``` As a suggestion, how about a special value that indicates an invalid key for the hash? With this, the above example could be written like this: ``` ruby { foo: 1, bar: bar? ? 2 : Hash::DROP, baz: nil } #=> {foo: 1, baz: nil} ``` -- https://bugs.ruby-lang.org/