Ответ 1
@var ||= []
и @var = @var || []
равны, он установит var
в []
, если он false
или nil
@var = [] if @var.nil?
более конкретный - переустановит var
на []
, только если он равен nil
Существуют ли различия между следующими способами инициализации переменных?
@var ||= []
@var = [] if @var.nil?
@var = @var || []
Поделитесь своим способом инициализации переменной и укажите плюсы и минусы.
@var ||= []
и @var = @var || []
равны, он установит var
в []
, если он false
или nil
@var = [] if @var.nil?
более конкретный - переустановит var
на []
, только если он равен nil
Если у вас есть предупреждения (и вы должны!), @var ||= []
ведет себя иначе: @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>
Если вы хотите проверить, определен ли @var
или нет, и вы счастливы, если он nil
или false
, вы можете использовать
@var = [] unless defined?(@var)
Это не будет работать с локальными переменными, но, как отмечено в В Ruby, почему foo = true unless defined?(foo)
не выполняет назначение?