Как вы инициализируете переменные в Ruby? - PullRequest
13 голосов
/ 06 сентября 2010

Есть ли различия между следующими способами инициализации переменных?

@var ||= []
@var = [] if @var.nil?
@var = @var || []

Пожалуйста, поделитесь своим способом инициализации переменной и укажите плюсы и минусы.

Ответы [ 2 ]

5 голосов
/ 07 сентября 2010

Если у вас есть предупреждения (и вы должны!), @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)сделать назначение?

5 голосов
/ 06 сентября 2010

@var ||= [] и @var = @var || [] равны, он установит var в [], если это false или nil

@var = [] if @var.nil? более конкретно - будет сброшен var до [] только если оно равно nil

...