💬
[Bug #20064] Inconsistent behavior between array splat *nil...
[Bug #20064] Inconsistent behavior between array splat *nil and hash splat **nil
-
*nil
と**nil
に一貫性がないというチケット - 以下のように
*nil
は問題ないが**nil
だとエラーになる
def hoge(...)
end
# これは OK
hoge(*nil)
# これは NG
hoge(**nil)
- これは
*nil
はnil.to_a
を呼び出しているが**nil
がnil.to_hash
を呼び出す違うから発生している-
NilClass#to_hash
は定義されていないのでエラーになる
-
class X
def to_a
["X#to_a"]
end
def to_hash
{ method: "X#to_hash" }
end
end
# * は内部で #to_a を呼び出す
pp *X.new
# => "X#to_a"
# ** は内部で #to_hash を呼び出す
pp **X.new
# => {:method=>"X#to_hash"}
- この話は他のチケットでも出てきてたけど明確なユースケースがなくて両方共 Close されている
- 今回はいかのようなユースケースで利用できる、というのがコメントに書かれている
invitation = if params.key?(:inviter_id)
{ invitation_attributes: params.slice(:inviter_id) }
end
User.create(
email: 'john.doe@ruby.example',
first_name: 'John',
first_name: 'Doe',
**invitation,
)
- まあ、あったほうが応用は聞きそう
Discussion