Como posso evitar que um argumento posicional seja expandido em argumentos de palavras-chave?

9

Eu gostaria de ter um método que aceita um hash e um argumento de palavra-chave opcional. Eu tentei definir um método assim:

def foo_of_thing_plus_amount(thing, amount: 10)
  thing[:foo] + amount
end

Quando invoco esse método com o argumento keyword, ele funciona como esperado:

my_thing = {foo: 1, bar: 2}
foo_of_thing_plus_amount(my_thing, amount: 20) # => 21

Quando deixo de fora o argumento da palavra-chave, no entanto, o hash é comido:

foo_of_thing_plus_amount(my_thing) # => ArgumentError: unknown keywords: foo, bar

Como posso evitar que isso aconteça? Existe algo como um anti-splat?

    
por ændrük 18.03.2013 в 16:14
fonte

2 respostas

4

Este é um bug que foi corrigido no Ruby 2.0.0-p247, veja este problema .

    
por Marc-André Lafortune 18.03.2013 / 19:08
fonte
1

E sobre

def foo_of_thing_plus_amount(thing, opt={amount: 10})
  thing[:foo] + opt[:amount]
end

my_thing = {foo: 1, bar: 2}   # {:foo=>1, :bar=>2}
foo_of_thing_plus_amount(my_thing, amount: 20)   # 21
foo_of_thing_plus_amount(my_thing)   # 11

?

    
por David Unric 18.03.2013 / 18:24
fonte