捕獲未宣告的關鍵字引數(雙 splat)
**
運算子與*
運算子的工作方式類似,但它適用於關鍵字引數。
def options(required_key:, optional_key: nil, **other_options)
other_options
end
options(required_key: 'Done!', foo: 'Foo!', bar: 'Bar!')
#> { :foo => "Foo!", :bar => "Bar!" }
在上面的例子中,如果不使用**other_options
,則會引發 ArgumentError: unknown keyword: foo, bar
錯誤。
def without_double_splat(required_key:, optional_key: nil)
# do nothing
end
without_double_splat(required_key: 'Done!', foo: 'Foo!', bar: 'Bar!')
#> ArgumentError: unknown keywords: foo, bar
當你想要傳遞給方法並且不想過濾金鑰的選項雜湊時,這很方便。
def options(required_key:, optional_key: nil, **other_options)
other_options
end
my_hash = { required_key: true, foo: 'Foo!', bar: 'Bar!' }
options(my_hash)
#> { :foo => "Foo!", :bar => "Bar!" }
也可以使用**
運算子解壓縮雜湊值。除了來自其他雜湊的值之外,這允許你直接向方法提供關鍵字:
my_hash = { foo: 'Foo!', bar: 'Bar!' }
options(required_key: true, **my_hash)
#> { :foo => "Foo!", :bar => "Bar!" }