Si tiene advertencias en (y usted debe!), @var ||= []
se comporta de manera diferente a @var = @var || []
:
irb(main):001:0> $VERBOSE = true
=> true
irb(main):002:0> @var ||= []
=> []
irb(main):003:0> @var2 = @var2 || []
(irb):3: warning: instance variable @var2 not initialized
=> []
irb(main):004:0>
Si desea comprobar si @var
se define o no, y que eres feliz si es nil
o false
, puede utilizar
@var = [] unless defined?(@var)
Esto no funcionará con las variables locales, aunque, como se señaló en In Ruby why won't foo = true unless defined?(foo)
make the assignment?
Pregunta relacionada: http://stackoverflow.com/questions/963868/in-ruby-should-i-use-or-if-defined-for-memoization –