9

ハッシュとオプションのキーワード引数を受け入れるメソッドが欲しいのですが。私はこのようなメソッドを定義しようとしました:

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

キーワード引数を使用してこのメ​​ソッドを呼び出すと、期待どおりに機能します。

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

ただし、キーワード引数を省略すると、ハッシュが食べられてしまいます。

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

どうすればこれを防ぐことができますか?アンチスプラットのようなものはありますか?

4

2 に答える 2

4

これは、Ruby 2.0.0-p247 で修正されたバグです。この問題を参照してください。

于 2013-03-18T18:08:00.217 に答える
1

どうですか

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

?

于 2013-03-18T17:24:34.450 に答える