为什么使用"返回"在Rails.cache.fetch块中无法缓存?

时间:2017-08-02 15:20:03

标签: ruby-on-rails caching

为什么在Rails.cache.fetch中使用return会导致缓存未命中?

# doesn't catch
Rails.cache.fetch("key", expires_in: 12.hours) do
 puts "CACHE MISS" 
 return "HI"
end

# caches
Rails.cache.fetch("key", expires_in: 12.hours) do 
 puts "CACHE MISS"
 "HI"
end

1 个答案:

答案 0 :(得分:0)

要对此进行解释,我们首先需要了解yield的工作原理:

  • yield关键字允许在方法调用期间传递一组附加指令。意思是,一个方法可以接受一个块(除常规参数外)并通过使用yield关键字从方法内部执行该块。

  • 我们需要知道的另一件事是,在执行yield块时,如果在其中调用return,它将返回整个方法,而不仅是该块。

  • 有关yield here的更多信息。

Rails.cache.fetch方法是通过接受一个块并使用yield关键字(带有一些其他逻辑)来执行的。 因此,当从发送到Rails.cache.fetch的块内部返回时,将返回整个方法,而无需首先处理(缓存)该块并产生结果,并且缓存失败。