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

jri*_*lai 7 ruby parameters ruby-on-rails

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

def print_time(time = 2.days.from_now)
  puts time
end
Run Code Online (Sandbox Code Playgroud)

我尝试在控制台中似乎工作,但这段代码安全吗?我的意思是通过例子:

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

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

谢谢你帮我澄清一下!:)

Lin*_*ios 15

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


ste*_*eve 2

嗯,你的问题不是特别清楚。

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

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

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