显然,||=
不会工作
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道歉,他给出了一个完全正确的答案。
https://stackoverflow.com/questions/11158972
复制相似问题