2013-03-06 97 views
6
p b #undefined local variable or method b for main:Object 
a = nil 
if a and (b=3) 
    do_something_with b 
end 
p b # nil 

爲什麼B如果塊的執行後,所獲得的價值nil,而預期的結果將是undefined local variable or method b for main:Object,是否紅寶石初始化事先存儲所有的變量nil變量中獲得初始化爲零

同樣的情況下,用下面的代碼

if nil 
    bb = 10 
end 
p bb # nil 

有人請扔在紅寶石如何初始化變量,什麼是在這種情況下,要對一些輕,感謝

+3

[爲什麼Ruby似乎會從case語句中提取變量聲明,即使該代碼路徑未執行?](http://stackoverflow.com/questions/12928050/why-does-ruby-seem - 從一個案件內的聲明 - e) – sawa 2013-03-06 06:44:40

回答

4

「[局部變量]是如果它出現在賦值表達式的左邊(在等號(U + 003D)之前),即使表達式沒有真正執行,它也會被初始化,後一類變量的值爲nil。

編輯:這個答案用於指向一個相當不錯的Ruby引用,它顯然已被惡意軟件站點所取代。我刪除了鏈接,但保留了答案的引用。

+1

鏈接不再工作。 – 2014-04-05 19:17:05

+0

鏈接指向潛在的惡意軟件站點。 – 2014-12-23 20:10:08

+0

看起來你是對的。我已經刪除了這個鏈接,以免任何人誤操作。 – 2014-12-24 19:39:07