gleich ist, wenn Sie Warnungen haben an (und Sie sollten!), @var ||= []
verhält sich anders als @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>
Wenn Sie prüfen möchten, ob @var
definiert ist oder nicht, und Sie sind glücklich, wenn es nil
oder false
ist, können Sie
@var = [] unless defined?(@var)
Dies funktioniert allerdings nicht mit lokalen Variablen verwenden, wie in In Ruby why won't foo = true unless defined?(foo)
make the assignment? bemerkt
Verwandte Frage: http://stackoverflow.com/questions/963868/in-ruby-should-i-use-or-if-defined-for-memoization –