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