Как запомнить метод, который может возвращать true, false или nil в Ruby?

Очевидно ||=не будет работать

def x?
  @x_query ||= expensive_way_to_calculate_x
end

, потому что если окажется falseили nil, то rich_way_to_calculate_xбудет выполняться снова и снова.

В настоящее время лучший способ, который я знаю, это поместить значение в Массив:

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— мои извинения Эндрю Маршаллу, который дал во всем остальном совершенно правильное отвечать.

16
задан Community 23 May 2017 в 11:46
поделиться