在这种情况下,可选参数是否有效

时间:2011-03-20 23:01:15

标签: ruby-on-rails ruby

我的功能如下:

def set_blah
   self.prop1 = .... if new_record?
end

我希望能够强制进行更新,即使它在某些情况下不是新记录,我可以在这里添加一个可选参数,以便我已经不会破坏所有其他调用吗?

def set_blah ( force )
  self.prop1 = ... if new_record? || force
end

3 个答案:

答案 0 :(得分:6)

是的,默认参数只在方法签名中指定:

def set_blah(force=false)
  do_something if new_record? || force
end

您可以尝试使用选项使您的调用序列更具可读性:

def set_blah(options = {:force => false})
  do_something if new_record? || options[:force]
end

通过明确指定它,您的调用序列类似于:

set_blah

set_blah(:force => true)

这似乎让@ set_blah @的呼叫点更加清晰。此外,您的rdoc将显示方法的默认参数,因此它是一种自我记录。

答案 1 :(得分:0)

是的,理论上您可以按原样使用您的代码。当你不想强迫时,只需使用set_blah(nil)。

答案 2 :(得分:0)

当然,只需将force设为默认参数,这样您就不需要更改现有的此方法调用:

def set_blah(force = false)
    self.prop1 = ... if new_record? or force
end