Cuidado || = operador ao lidar com booleanos

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 @deadvariá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