Ruby Language Capture d'arguments de mots clés non déclarés (double splat)


Exemple

L'opérateur ** fonctionne de la même manière que l'opérateur * mais il s'applique aux paramètres de mot-clé.

def options(required_key:, optional_key: nil, **other_options)
  other_options
end

options(required_key: 'Done!', foo: 'Foo!', bar: 'Bar!')
#> { :foo => "Foo!", :bar => "Bar!" }

Dans l'exemple ci-dessus, si **other_options n'est pas utilisé, un ArgumentError: unknown keyword: foo, bar erreur de ArgumentError: unknown keyword: foo, bar serait **other_options .

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

C'est pratique lorsque vous avez un hachage d'options que vous souhaitez transmettre à une méthode et que vous ne souhaitez pas filtrer les clés.

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!" }

Il est également possible de déballer un hash en utilisant l'opérateur ** . Cela vous permet de fournir un mot-clé directement à une méthode en plus des valeurs d'autres hachages:

my_hash = { foo: 'Foo!', bar: 'Bar!' }

options(required_key: true, **my_hash)
#> { :foo => "Foo!", :bar => "Bar!" }