gpt4 book ai didi

ruby-on-rails - 为什么在 Rails.cache.fetch block 中使用 "return"缓存失败?

转载 作者:行者123 更新时间:2023-12-05 06:38:51 24 4
gpt4 key购买 nike

为什么在 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

最佳答案

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

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

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

  • 查看有关yield 的更多信息 here .

Rails.cache.fetch 方法是通过接受一个 block 并使用 yield 关键字(带有一些额外的逻辑)执行它来实现的。因此,当从发送到 Rails.cache.fetch 的 block 内部返回时,整个方法在没有首先处理(缓存)产生结果的 block 的情况下返回,并且缓存失败。

关于ruby-on-rails - 为什么在 Rails.cache.fetch block 中使用 "return"缓存失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45464828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com