2011-03-20 29 views
0

我有一個功能,如:將在此情況下的可選參數工作

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

我希望能夠以強制更新,即使它不是在某些情況下,一個新的記錄,我可以再補充一個可選參數在這裏,所有其他的電話,我已經不會打破?

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

您可能想要寫「force || new_record?」,「輕」表達式總是首先在短路邏輯中。 – tokland 2011-03-20 23:14:46

+0

請記住縮進你的代碼。 – 2011-03-20 23:15:45

回答

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將顯示方法的默認參數,所以它是一種自我記錄。

0

是的,理論上可以使用你的代碼按原樣。當你不想強迫時,只需使用set_blah(nil)。

0

當然,只是讓force默認的參數,所以你不需要更改現有調用此方法:

def set_blah(force = false) 
    self.prop1 = ... if new_record? or force 
end 
相關問題