ActiveSupport::Memoizes 指的是哪种 Ruby memoize 模式?

2024-03-09

因此在 Rails 3.2 中,ActiveSupport::Memoizes 已被弃用。

消息内容如下:

DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.

它指的是“Ruby 记忆模式”(单数),就好像有一种模式我们都应该知道并参考......

我想他们的意思是这样的:

def my_method
  @my_method ||= # ... go get the value
end

or

def my_method
  return @my_method if defined?(@my_method)

  @my_method = # ... go get the value
end

还有什么我错过的吗?


以下是 Memoized 被弃用的提交(以及后续讨论):https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c

作者主张@foo ||= ...方法和指向此提交 https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c#commitcomment-433227作为迁移的示例:https://github.com/rails/rails/commit/f2c0fb32c0dce7f8da0ce446e2d2f0cba5fd44b3 https://github.com/rails/rails/commit/f2c0fb32c0dce7f8da0ce446e2d2f0cba5fd44b3.

编辑: 请注意,我不一定将此更改解释为意味着所有实例memoize可以或应该用此模式替换。我认为这意味着 Rails 代码本身不再需要/不需要 Memoizable。正如评论所指出的,Memoizes 不仅仅是一个包装器@foo ||= ...。如果您需要这些功能,请继续使用 Memoizes,您只需从 ActiveSupport 以外的其他地方获取它(我猜有人会分叉一个 gem 版本,如果他们还没有的话)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveSupport::Memoizes 指的是哪种 Ruby memoize 模式? 的相关文章

随机推荐