2012-04-02 15 views
7

我有呼籲整數的方法的方法:是否有可能對Ruby中的默認參數值進行動態方法調用?

def print_time(time = 2.days.from_now) 
    puts time 
end 

我試着似乎工作控制檯,但就是這個代碼安全嗎? 我的意思是比如:

  • 我跑我的緩存緩存服務器啓用
  • 我把它打印在2天后的方法
  • 1個小時後打印纔會真正1小時+ 2天后的價值?

當方法定義時,值(2.days.from_now)是否只計算一次?

感謝您幫助我澄清! :)

回答

2

那麼你的問題不是特別清楚。

你擔心緩存嗎?很明顯,在緩存被清除之前,被評估然後被緩存的內容(即,使用動作緩存或頁面緩存)將不會被再次評估。

或者您是否擔心在定義方法時緩存的默認參數值,並且所有後續調用可能具有與默認值相同的值?在這種情況下,您的控制檯測試是有效的,@ Linux_iOS.rb.cpp.c.lisp.n(longest.name.evar)是正確的 - Ruby每次都會對該表達式進行評估。

出於好奇,是什麼讓你懷疑自己在控制檯上的測試?

+0

對不起,關於這個名字......我會改變它,但這會打破不少鏈接。 – Linuxios 2012-04-02 23:47:17

14

Ruby每次調用該方法時都會評估表達式。所以如果你在星期二定義它,並在星期四打電話,結果是正確的。

相關問題