Você pode usar o ||=
operador para variáveis de cache:
def pi
@pi ||= Pi.compute_precisely
end
Apenas tome cuidado ao lidar com booleanos, especialmente se o resultado da função for dependente do tempo ou não determinístico:
def schrodingers_cat_dead?
@dead ||= rand < 0.5
end
schrodingers_cat_dead? # => false
schrodingers_cat_dead? # => false
schrodingers_cat_dead? # => true
Neste caso, a @dead
variável de cache é avaliada até que se torne true
. Isso é porque !!nil == false
. Em vez disso, você deve escrever:
def schrodingers_cat_dead?
@dead = rand < 0.5 if @dead.nil?
@dead
end
schrodingers_cat_dead? # => false
schrodingers_cat_dead? # => false
schrodingers_cat_dead? # => false