2011-02-03 33 views
1

我on Rails的3使用Ruby和我有這種情況:什麼值假定使用Ruby on Rails的未初始化變量?

在控制器我有

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

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

如果a是假的,在if聲明中會發生什麼,而不必初始化變量flag?也就是說,flag變量「always」/「無論如何」都設置爲NOT TRUE?

這是一種安全的方法嗎?

+0

您的意思是用大寫的A?以大寫字母開頭的東西是一個常數。 – 2011-02-03 01:22:58

+0

你有權!這是一個變量!對不起,我會更新這個問題。 – user502052 2011-02-03 01:38:40

回答

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 
0

你可以嘗試這樣的事情出在irb

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

所以你可以看到,即使if條件是假的,foo變量引入(這是nil,將待處理的與if中的false相同,所以你很安全)。我懷疑這是因爲if語句沒有引入新的範圍。請參閱:

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

最終的一個想法:如果A真的只是一個布爾值,你可以設置flag = A,避免if乾脆。

+0

只需要知道,我在@Mike Bethany評論後更新了一些問題。 – user502052 2011-02-03 01:40:12

相關問題