0

動的パラメーターを渡したいメソッドがあります。メソッドはループで呼び出され、使用できる場合value2と使用できない場合があります。

オプションのメソッド パラメータを処理する一般的な方法は何ですか?

my_method(:value1 => 1,
          :value2 => 2 if foo,  # this is not working
          :value3 => 3)
4

1 に答える 1

1

私は通常、次のようなハッシュを作成します。

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(...)
于 2012-05-10T13:45:43.527 に答える