Si vous avez des avertissements sur (et vous devriez!), @var ||= []
se comporte différemment à @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 vous souhaitez vérifier si @var
est défini ou non, et vous êtes heureux si elle est nil
ou false
, vous pouvez utiliser
@var = [] unless defined?(@var)
Cela ne fonctionnera pas avec les variables locales si, comme il est indiqué dans In Ruby why won't foo = true unless defined?(foo)
make the assignment?
Question connexe: http://stackoverflow.com/questions/963868/in-ruby-should-i-use-or-if-defined-for-memoization –