Ruby on rails 如何保存实例方法的值?

Ruby on rails 如何保存实例方法的值?,ruby-on-rails,methods,load,Ruby On Rails,Methods,Load,如果我有一个项目列表,并且我正在为每一个项目调用一个实例方法,那么如何保存该方法的值并防止每次调用时都计算它 假设我有两项: <% if method_true %> do something <% end %> <% if method_true %> do something else <% end %> 做点什么 做点别的 如果method_true==true,我如何通过两个ifs传递值true,而不是每次都计算它呢?我肯定有

如果我有一个项目列表,并且我正在为每一个项目调用一个实例方法,那么如何保存该方法的值并防止每次调用时都计算它

假设我有两项:

<% if method_true %>
  do something
<% end %>
<% if method_true %>
  do something else
<% end %>

做点什么
做点别的

如果method_true==true,我如何通过两个ifs传递值
true
,而不是每次都计算它呢?

我肯定有一个更复杂的答案,但对于我的应用程序,我只是将值保存在一个实例变量中

型号

def method_true
  #...
end
查看

<% if @model.method_true.true? %>
  <% @x = true %>
<% end %>

之后,您可以使用

<% if @x == true %>

而不是

<% if @model.method_true.true? %>

这种方法不需要重新计算。如果
method\u true
不为true,那么
@x
将为零,因此
if
条件将不会执行。

您可以
method\u true?
(按照惯例,返回布尔值的Ruby方法以问号结尾)

如果
您的昂贵计算
只能为真/假:

def method_true?
  if @method_true.nil?
    @method_true = # your expensive calculation
  end
  @method_true
end
如果您也关心记忆零:

def method_true?
  unless defined?(@method_true)
    @method_true = # your expensive calculation
  end
  @method_true
end

哇…我本来想做一些超复杂的事情,包括反缓存之类的事情,所以我甚至没想到它会这么简单…谢谢。我会尽快给你赏金。你是在对列表中的每一项都调用
item.method\u true
?或者这是一种辅助方法?@messanjah实际上我两种方法都在使用,所以问题不一定针对这两种方法。为什么,两者的计算方式不同?这可能很重要。如果每个项目都可以返回不同的值,那么您就不想保存其中一个以供重用。