Как мне запомнить метод, который может возвращать true, false или nil в Ruby?
очевидно||=
не будет работать
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
Есть ли более обычный или эффективный способ сделать это?
UPDATE Я понял, что хочу запомнитьnil
в дополнение кfalse
- это продолжается вплоть доhttps://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-boolean-as-cached-value - мои извиненияЭндрю Маршалл который дал в противном случае совершенно правильный ответ.