为什么在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
答案 0 :(得分:0)
要对此进行解释,我们首先需要了解yield的工作原理:
yield关键字允许在方法调用期间传递一组附加指令。意思是,一个方法可以接受一个块(除常规参数外)并通过使用yield关键字从方法内部执行该块。
我们需要知道的另一件事是,在执行yield块时,如果在其中调用return,它将返回整个方法,而不仅是该块。
有关yield
here的更多信息。
Rails.cache.fetch
方法是通过接受一个块并使用yield
关键字(带有一些其他逻辑)来执行的。
因此,当从发送到Rails.cache.fetch
的块内部返回时,将返回整个方法,而无需首先处理(缓存)该块并产生结果,并且缓存失败。