【发布时间】:2012-06-24 21:59:25
【问题描述】:
显然||= 不起作用
def x?
@x_query ||= expensive_way_to_calculate_x
end
因为如果结果是false 或nil,那么expensive_way_to_calculate_x 将被一遍又一遍地运行。
目前我知道的最好的方法是将值放入Array:
def x?
return @x_query.first if @x_query.is_a?(Array)
@x_query = [expensive_way_to_calculate_x]
@x_query.first
end
有没有更传统或更有效的方法来做到这一点?
更新我意识到除了false之外我还想记住nil - 这一直追溯到https://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-boolean-as-cached-value - 我向Andrew Marshall道歉正确答案。
【问题讨论】:
-
这就是
nil和null的整个概念的用途。 -
我编辑了我的问题,因为我第一次没有做对 - 我也想记住 nil。
标签: ruby null memoization