2012-04-02 5 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

14

Rubyは、メソッドを呼び出すたびに式を評価します。したがって、火曜日に定義して木曜日に呼び出すと、結果は正しいでしょう。

関連する問題