Obviamente ||=
no funcionará¿Cómo puedo memorizar un método que puede devolver verdadero, falso o nulo en Ruby?
def x?
@x_query ||= expensive_way_to_calculate_x
end
porque si resulta ser false
o nil
, entonces expensive_way_to_calculate_x
obtendrá ejecutar una y otra vez.
Actualmente la mejor manera que conozco es poner el valor en un Array
:
def x?
return @x_query.first if @x_query.is_a?(Array)
@x_query = [expensive_way_to_calculate_x]
@x_query.first
end
¿Hay una manera más convencional o eficiente de hacer esto?
ACTUALIZACIÓN me di cuenta de que quería memoize nil
además de false
- esto va todo el camino de regreso a https://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-boolean-as-cached-value - mis disculpas a Andrew Marshall que dio una respuesta de otro modo completamente correcto.
Esto es para lo que 'nil' y todo el concepto de' null' son. – meagar
Modifiqué mi pregunta porque no lo había hecho bien la primera vez; también quiero memorizar nada. –