
Issue #20738 has been updated by jeremyevans0 (Jeremy Evans). ursm (Keita Urashima) wrote in #note-9:
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...
I reviewed every example listed and in all cases I think it would be made harder to understand using the proposed feature. Each example listed is straightforward and easy to understand currently. ---------------------------------------- Feature #20738: Removing a specific entry from a hash literal https://bugs.ruby-lang.org/issues/20738#change-109782 * 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/