Какое значение принимает неинициализированная переменная с использованием Ruby on Rails? - PullRequest
1 голос
/ 03 февраля 2011

Я использую Ruby on Rails 3 и у меня такая ситуация:

В контроллере у меня есть

# first statement
if a == true
  flag = true
end

# second statement
if flag == true
  // code1
else
  // code2
end

Если a равно false, что произойдет в операторе if без инициализации переменной flag? То есть переменная flag «всегда» / «в любом случае» установлена ​​в значение «НЕ ИСТИНА»?

Это безопасный подход?

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Неназначенная переменная равна nil, но константы работают немного по-другому. С переменной, отличной от nil или false, будет установлено значение true. С константой вам нужно использовать definded?(CONSTANT), чтобы ваш код выглядел так:

# first statement
flag = A if defined?(A)

# second statement
if flag
  puts "Code 1"
else
  puts "Code 2"
end

# Or if you don't need the flag variable
if defined?(A) && A
  puts "Code 1"
else
  puts "Code 2"
end

Выход:

Code 2
Code 2
0 голосов
/ 03 февраля 2011

Вы можете попробовать подобные вещи в irb:

>> if false
>>   foo = "bar"
>>   end
=> nil
>> foo
=> nil

Итак, вы можете видеть, что, хотя условие if ложно, вводится переменная foo (это nil, которая будет обрабатываться так же, как false в вашем if, поэтому безопасны). Я подозреваю, что это потому, что операторы if не вводят новую область видимости. См:

>> if true
>>   bar = "baz"
>>   end
=> "baz"
>> bar
=> "baz"

Одна заключительная мысль: если A действительно просто логическое значение, вы можете установить flag = A и вообще избежать if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...