Oczywiście ||=
nie zadziałaJak mogę zapamiętać metodę, która może zwrócić wartość true, false lub nil w Ruby?
def x?
@x_query ||= expensive_way_to_calculate_x
end
bo jeśli okaże się false
lub nil
, następnie expensive_way_to_calculate_x
dostanie uruchomić kółko.
Obecnie najlepszym sposobem wiem jest umieścić wartość do w Array
:
def x?
return @x_query.first if @x_query.is_a?(Array)
@x_query = [expensive_way_to_calculate_x]
@x_query.first
end
Czy jest bardziej konwencjonalny lub skuteczny sposób to zrobić?
UPDATE zdałem sobie sprawę, że chciałem memoize nil
oprócz false
- to idzie przez całą drogę z powrotem do https://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-boolean-as-cached-value - moje przeprosiny do Andrew Marshall który dał się zupełnie inaczej poprawną odpowiedź.
Oto, czym są 'nil' i cała koncepcja' null'. – meagar
Edytowałem moje pytanie, ponieważ nie zrobiłem tego dobrze za pierwszym razem - również chcę zapamiętać zero. –