Issue #20064 has been updated by Dan0042 (Daniel DeLorme).
matz (Yukihiro Matsumoto) wrote in #note-2:
But I am against adding `nil.to_h`.
`nil.to_h` already exists.
Do you mean you are against using #to_h for double splats? If that's the case I would
really appreciate if you could explain your reasoning.
----------------------------------------
Bug #20064: Inconsistent behavior between array splat *nil and hash splat **nil
https://bugs.ruby-lang.org/issues/20064#change-105771
* Author: zeke (Zeke Gabrielse)
* Status: Open
* Priority: Normal
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
This has been discussed in #8507 and #9291 but both were closed because they lacked a
clear use case.
I think the following code should work, showing a clear use case:
```ruby
invitation = if params.key?(:inviter_id)
{ invitation_attributes: params.slice(:inviter_id) }
end
User.create(
email: 'john.doe(a)ruby.example'ple',
first_name: 'John',
first_name: 'Doe',
**invitation,
)
```
Per the previous discussions, this is because `*` uses explicit conversion to array
(`to_a`, not `to_ary`), while `**` uses implicit conversion to hash (`to_hash`, not
`to_h`).
I find it confusing that you can splat nil into an array, but not nil into a hash. It
would make sense for `**` to use explicit conversion.
--
https://bugs.ruby-lang.org/