如何保存实例方法的值?
How can I save the value of an instance method?
如果我有一个项目列表,并且我正在为其中的每一个项目调用一个实例方法,我该如何保存该方法的值并防止它在每次调用时都被计算?
假设我有两个项目:
<% 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_true
不为真,那么 @x
将为零,因此 if?
条件将不会被执行。
您可以 memoize method_true?
(Ruby 布尔值按照惯例以问号结尾的 return 方法)。
如果your expensive calculation
只能是true/false:
def method_true?
if @method_true.nil?
@method_true = # your expensive calculation
end
@method_true
end
如果你也关心 memoizing nil:
def method_true?
unless defined?(@method_true)
@method_true = # your expensive calculation
end
@method_true
end
Whosebug question on memoizing true/false/nil
如果我有一个项目列表,并且我正在为其中的每一个项目调用一个实例方法,我该如何保存该方法的值并防止它在每次调用时都被计算?
假设我有两个项目:
<% 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_true
不为真,那么 @x
将为零,因此 if?
条件将不会被执行。
您可以 memoize method_true?
(Ruby 布尔值按照惯例以问号结尾的 return 方法)。
如果your expensive calculation
只能是true/false:
def method_true?
if @method_true.nil?
@method_true = # your expensive calculation
end
@method_true
end
如果你也关心 memoizing nil:
def method_true?
unless defined?(@method_true)
@method_true = # your expensive calculation
end
@method_true
end
Whosebug question on memoizing true/false/nil