我正在使用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?
这是一种安全的方法吗?
答案 0 :(得分:1)
未分配的变量等于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
答案 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
。