bod*_*ous 54 ruby memoization activesupport ruby-on-rails-3
所以在Rails 3.2中,不推荐使用ActiveSupport :: Memoizable.
消息如下:
DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.
Run Code Online (Sandbox Code Playgroud)
它指的是"Ruby memoization pattern"(单数),好像有一个模式,我们都应该知道并参考...
我认为他们的意思是:
def my_method
@my_method ||= # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
要么
def my_method
return @my_method if defined?(@my_method)
@my_method = # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
还有其他我错过的东西吗?
ava*_*tok 38
以下是不推荐使用Memoizable的提交(以及后续讨论):https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c
作者提倡这种@foo ||= ...方法,并将此提交作为迁移的示例:https://github.com/rails/rails/commit/f2c0fb32c0dce7f8da0ce446e2d2f0cba5fd44b3.
编辑:请注意,我不一定将此更改解释为memoize可以或应该使用此模式替换所有实例.我读它意味着Rails代码本身不再需要/想要Memoizable.正如评论所指出的那样,Memoizable不仅仅是一个包装器@foo ||= ....如果你需要这些功能,继续使用Memoizable,你只需要从ActiveSupport以外的地方获取它(我猜有人会分叉一个gem版本,如果他们还没有).
小智 32
另一种选择是使用Memoist gem:
它是直接提取ActiveSupport::Memoizable,可以作为替代品使用.只是require 'memoist'改变
extend ActiveSupport::Memoizable
Run Code Online (Sandbox Code Playgroud)
至
extend Memoist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11915 次 |
| 最近记录: |