Rubyの**と*の意味
わかりやすいURL
https://zenn.dev/igaiga/books/rails-practice-note/viewer/ruby_argument_literals
**と*について
関数定義の引数として渡すケース
**→ハッシュにする
*→配列にする
これをオプション引数と呼ぶ
関数利用で渡すケース
**→ハッシュを展開にする
*→配列を展開する
**の使い方
定義関数にある場合は、ハッシュとして受け取れるようになる
また、関数呼び出しに変数を**で呼び出すと展開される
code:rb
# ハッシュにして受け取るケース
def test(a, b, **kwrgs)
p a
p b
p kwrgs
end
test(1, 2, a: 4, b: 4, c: 5)
# 変数を展開して利用するケース
def test(a:, b:, c:)
p a
p b
p c
end
params = {a: 1, b: 2, c: 3}
test(**params)
以下のように使う場合、ハッシュを展開して関数側で再度ハッシュにしている
code:rb
def test(a, b, **kwrgs)
p a
p b
p kwrgs
end
var = {c: 1, d:10}
test(1,5, **var)
ハッシュ受け取りとハッシュ展開渡しと呼ばれる。
*の使い方
配列を展開して複数の引数として扱うことが可能となる。
code:rb
def test(a,b)
puts a
puts b
end
=> test(*1,2)
上記の通り、1と2を関数の引数として複数状態で渡すことができるようになる。
受け取り側で「*」をつけると配列で受け取れるようになる
code:rb
def test(*arg)
puts arg #=>1,2
puts b
end
=> test(1,2)
これは、配列受け取りと配列展開渡しと呼ばれている
つまり*を渡す時に使ったら展開され、受け取り側で*がある時は配列になる