2017-07-28 57 views
3

我有如下的紅寶石奇怪的行爲:爲什麼後綴`if` Ruby的工作這麼奇怪

var1.zero? if var1 = 1 

NameError : undefined local variable or method var1 for main:Object

從另一個方面,如果我在一個標準的if做同樣的事情,所有的作品預計:

if var1 = 1 
    var1.zero? 
end 
# => false 

任何人都可以描述如何在Ruby中工作後綴if

+1

你的意思是'VAR1 == 1'? –

+1

'if var1 = 1; ..; end'和'if true一樣; ...; end'。 –

+0

不,我的意思是'var1 = 1',而不是'var1 == 1'。 – user3240646

回答

0

它會從左到右,首先它會讀取var1.zero?然後if var1 = 1

var1.zero? if var1 = 1 

這就是爲什麼它會得到var1

NameError: undefined local variable or method `var1' for main:Object

這裏,

if var1 = 1 
    var1.zero? 
end 

var1 = 1將創建值爲1的var1,所以它不會拋出錯誤。當它執行var1.zero?

+0

在一個常見的情況下,Ruby是懶惰的。此外,什麼意思是「讀」?我知道'eval',但它是如何評估和不同時評估?你知道如何工作翻譯,你能從這個角度描述這種行爲嗎?我會非常感激這一點。 – user3240646

4

因爲如果我問你

Isn't my daughter cute...

你會打斷我

You have a daughter?

之前,我可以完成我的頭一句這是

Isn't my daughter cute, this is her [showing picture]?


但是,如果我問你

[showing picture] This is my daughter, isn't she cute?

您可以輕鬆應對

No

相關問題