我有如下的紅寶石奇怪的行爲:爲什麼後綴`if` Ruby的工作這麼奇怪
var1.zero? if var1 = 1
NameError
: undefined local variable or methodvar1
for main:Object
從另一個方面,如果我在一個標準的if
做同樣的事情,所有的作品預計:
if var1 = 1
var1.zero?
end
# => false
任何人都可以描述如何在Ruby中工作後綴if
?
我有如下的紅寶石奇怪的行爲:爲什麼後綴`if` Ruby的工作這麼奇怪
var1.zero? if var1 = 1
NameError
: undefined local variable or methodvar1
for main:Object
從另一個方面,如果我在一個標準的if
做同樣的事情,所有的作品預計:
if var1 = 1
var1.zero?
end
# => false
任何人都可以描述如何在Ruby中工作後綴if
?
它會從左到右,首先它會讀取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?
。
在一個常見的情況下,Ruby是懶惰的。此外,什麼意思是「讀」?我知道'eval',但它是如何評估和不同時評估?你知道如何工作翻譯,你能從這個角度描述這種行爲嗎?我會非常感激這一點。 – user3240646
因爲如果我問你
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
你的意思是'VAR1 == 1'? –
'if var1 = 1; ..; end'和'if true一樣; ...; end'。 –
不,我的意思是'var1 = 1',而不是'var1 == 1'。 – user3240646