💬
[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