什么值假设使用Ruby on Rails的未初始化变量?

时间:2011-02-03 01:08:19

标签: ruby

我正在使用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变量“always”/“在任何情况下”都设置为NOT TRUE?

这是一种安全的方法吗?

2 个答案:

答案 0 :(得分:1)

未分配的变量等于nil,但常量的工作方式略有不同。对于变量,nilfalse以外的任何内容都将评估为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

答案 1 :(得分:0)

你可以在irb中尝试这种事情:

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

因此,您可以看到,即使if条件为false,也会引入foo变量(nil,它将被视为与false相同在你的if,所以你是安全的。我怀疑这是因为if语句没有引入新范围。参见:

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

最后一个想法:如果A实际上只是一个布尔值,您可以设置flag = A并完全避免使用if