使用rails演示者 – 记忆在3.1中被弃用 – 使用|| =而不是?

问题:尽可能避免创建多个对象或多个查询。

我正在使用带有rails的Presenters作为最佳实践。

我遵循的建议说,使用“扩展ActiveSupport.Memoizable”(然后使用memoize:方法来使用它们)比使用@the_record = record ||= @record样式设置项目@the_record = record ||= @record几个问题 – false或nil没有被存储,所以查询再次被调用,而memoizable更好地使用缓存(即使用它!)。

但是我看到memoizable在rails 3.1中被弃用了。我在webwave下使用github并使用语句:“DEPRECATION WARNING:不推荐使用ActiveSupport :: Memoizable,将来的版本中将删除它,只需使用Ruby memoization模式。(来自extend at /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284″ 。

也许它已经解决了? 谁知道?

关于今后使用的最佳做法的任何建议? 使用|| =语法? 上述问题怎么样?

在此处输入图像描述

||=方法非常适用于返回值为true的值的东西,但对于那些没有的东西,它不能很好地工作。 memoize通过捕获这些条件并相应地返回来解决这个问题。 如果你想要容纳nil你可以采取这样的方法:

 def some_method return @some_method if (instance_variable_defined?(:"@some_method")) @some_method = begin ... end end 

这只是检查变量是否已定义,而不是是否已设置,这在您的情况下是一个重要的区别。

我不确定你为什么认为它被弃用[来自Michael的注释,它在3.2中被弃用,见下面的注释]。 文档表明它仍然是3.1中的最新版本。 有些实现在从一个模块移动到另一个模块时被标记为“已弃用”,但该工具仍然可用。