8

単一のスプラットで、配列を複数の引数に展開できます。これは、配列を直接渡すのとはかなり異なります。

def foo(a, b = nil, c = nil)
  a
end

args = [1, 2, 3]

foo(args)  # Evaluates to foo([1, 2, 3]) => [1, 2, 3]
foo(*args) # Evaluates to foo(1, 2, 3)   => 1

ただし、キーワード引数を使用すると、ハッシュの構文糖衣にすぎないため、違いはわかりません。

def foo(key:)
  key
end

args = { key: 'value' }

foo(args)   # Evaluates to foo(key: 'value') => 'value'
foo(**args) # Evaluates to foo(key: 'value') => 'value'

見事な対称性とは別に、メソッド呼び出しでダブル スプラットを使用する実用的な理由はありますか? (これは、メソッド定義でそれらを使用することとは異なることに注意してください)

4

1 に答える 1