動的パラメーターを渡したいメソッドがあります。メソッドはループで呼び出され、使用できる場合value2
と使用できない場合があります。
オプションのメソッド パラメータを処理する一般的な方法は何ですか?
my_method(:value1 => 1,
:value2 => 2 if foo, # this is not working
:value3 => 3)
動的パラメーターを渡したいメソッドがあります。メソッドはループで呼び出され、使用できる場合value2
と使用できない場合があります。
オプションのメソッド パラメータを処理する一般的な方法は何ですか?
my_method(:value1 => 1,
:value2 => 2 if foo, # this is not working
:value3 => 3)
私は通常、次のようなハッシュを作成します。
opts = {:value1 => 1,
:value3 => 3}
opts[:value2] = 2 if foo
my_method(opts)
このアプローチの利点if foo
は、特殊なケースであるため、誰もが を把握できることです。そうしないと、私のように多くのプログラマーが一見これを見落として、なぜ :value2 が設定されていないのか混乱してしまいます。
デフォルト設定がある場合は、次のアプローチを使用できます。
default = {:value1 => 0,
:value2 => 0,
:value3 => 0}
opts = {:value1 => 1,
:value3 => 3}
my_method(default.merge(opts))
またはさらに良い:
DEFAULT_OPTS = {:value1 => 0,
:value2 => 0,
:value3 => 0}
def my_method(opts)
opts = DEFAULT_OPTS.merge(opts)
# ...
end
my_method(...)