Se si dispone di avvertimenti on (e si dovrebbe!), @var ||= []
si comporta in modo diverso 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>
Se si desidera verificare se @var
è definito o no, e sei felice se è nil
o false
, è possibile utilizzare
@var = [] unless defined?(@var)
Questo non funziona con le variabili locali, però, come già sottolineato in In Ruby why won't foo = true unless defined?(foo)
make the assignment?
fonte
2010-09-06 23:39:42
Domanda correlata: http://stackoverflow.com/questions/963868/in-ruby-should-i-use-or-if-defined-for-memoization –