Issue #20064 has been reported by zeke (Zeke Gabrielse).
----------------------------------------
Bug #20064: Inconsistent behavior between array splat *nil and hash splat **nil
https://bugs.ruby-lang.org/issues/20064
* 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/