处理可选方法参数的常用方法是什么?

时间:2012-05-10 10:17:15

标签: ruby parameter-passing

我有一种方法,我想传递动态参数。该方法在循环中调用,有时value2可用,有时不可用。

处理可选方法参数的常用方法是什么?

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

2 个答案:

答案 0 :(得分: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(...)

答案 1 :(得分:0)

选中此blog post,以满足您的所有需求。