1. ホーム
  2. ルビー

[解決済み】double * (splat)演算子は何をするのですか?

2022-04-05 22:28:13

質問

このように宣言された関数を見たことがありますか?

def foo a, **b
  ...
end

が1つであることは理解しています。 * はスプラット演算子です。とは ** の意味は?

どのように解決するのですか?

Ruby 2.0ではキーワード引数が導入されており ** のように動作します。 * ただし、キーワード引数の場合。これは、キーと値のペアを持つハッシュを返します。

このコードの場合

def foo(a, *b, **c)
  [a, b, c]
end

以下はデモです。

> foo 10
=> [10, [], {}]
> foo 10, 20, 30
=> [10, [20, 30], {}]
> foo 10, 20, 30, d: 40, e: 50
=> [10, [20, 30], {:d=>40, :e=>50}]
> foo 10, d: 40, e: 50
=> [10, [], {:d=>40, :e=>50}]