【发布时间】:2016-01-18 21:47:25
【问题描述】:
Ruby 是否会缓存方法的结果,以便在调用两次时不需要对其进行两次评估?
我在 Rails 中工作,例如,我可以执行以下操作,将传递到 Rails 控制器的参数的结果存储在一个变量中,如下所示:
def foo_bar_method
case param[:foobar]
when 'foo' then 'bar'
when 'bar' then 'baz'
else 'barbaz'
end
result = foo_bar_method
puts result
puts result
这样我只评估一次foo_bar_method。 Ruby 是否缓存此方法的结果(或者 Rails 是否这样做)?使用上面显示的代码是不是更快,还是下面的代码会产生相同的性能?
def foo_bar_method
case param[:foobar]
when 'foo' then 'bar'
when 'bar' then 'baz'
else 'barbaz'
end
puts foo_bar_method
puts foo_bar_method
【问题讨论】:
-
它会缓存SQL查询,但我不认为上述方法的结果会被缓存。
-
注意:为了做到这一点,Ruby 必须判断该方法是否是引用透明的,这相当于解决了 Halting Problem。
标签: ruby-on-rails ruby caching