是否可以在Ruby中对默认参数值进行动态方法调用?

时间:2012-04-02 19:19:22

标签: ruby-on-rails ruby parameters

我有一个在整数上调用方法的方法:

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

我在控制台中试过它似乎有效,但这段代码安全吗? 我的意思是:

  • 我在启用缓存缓存的情况下运行我的服务器
  • 我打电话给2天后打印的方法
  • 1小时后打印的值真的是1小时+ 2天后?

当定义方法时,值(2.days.from_now)只评估一次吗?

感谢您帮助我澄清! :)

2 个答案:

答案 0 :(得分:15)

Ruby每次调用方法时都会计算表达式。因此,如果您在星期二定义它,并在星期四调用它,结果将是正确的。

答案 1 :(得分:2)

你的问题不是特别清楚。

您是否担心缓存?显然,在清除缓存之前,不会再次评估被评估然后缓存的内容(即,使用操作缓存或页面缓存)。

或者您是否担心在定义方法时缓存的默认参数值,并且所有后续调用可能与默认值具有相同的值?在这种情况下,您的控制台测试是有效的,@ Linux_iOS.rb.cpp.c.lisp.n(longest.name.evar)是正确的 - Ruby每次都会评估该表达式。

出于好奇,是什么让你怀疑自己在控制台中的测试?