2012-07-25 54 views
0

Possible Duplicate:
conditional statement and assigning value in ruby的Ruby語法怪異

雖然重構了一些Rails代碼,我曾經遇到過的紅寶石一些語法怪胎。

給出下面的方法

def get_value 
    42 
end 

爲什麼這項工作?

if value = get_value 
    puts value 
end 

雖然這不?

puts value if value = get_value 

後者給出錯誤:undefined local variable or method `value' for main:Object (NameError)。我認爲這些表達是平等的?當投注之前評估if塊時,value不應該是未定義的。

+0

我知道這是一個dup但找不到它 – DGM 2012-07-25 12:31:40

+0

[This answer should help](http://stackoverflow.com/a/4500597/499609)。 – Ashe 2012-07-25 12:31:59

+0

@DGM:我有完全一樣的感覺!我剛剛花了最後9分鐘尋找一個騙局,似乎沒有人出現。 – Ashe 2012-07-25 12:32:17

回答

4

這是由於線的解析,vs執行時間。在第一個版本中,值被解析並設置,然後評估投入。在第二行中,當解析器到達變量puts value時,它尚未定義。換句話說,它不能運行該行設置變量,直到它有第一個解析該行。