2015-01-20 28 views
0

我看到兩個MRI 2.0和JRuby 1.7.16.1以下行爲:紅寶石VS賦值表達式修改優先

irb(main):001:0> a 
NameError: undefined local variable or method `a' for main:Object 
     from (irb):1 
     from /usr/bin/irb:12:in `<main>' 
irb(main):002:0> a = 2 unless true 
=> nil 
irb(main):003:0> a 
=> nil 
irb(main):004:0> 

我預計a仍然不確定,因爲=的優先級高於unless。我錯過了什麼?

回答

0

a = 2 unless true評價是這樣的:

unless true 
    a = 2 
end 

優先不發揮作用,因爲它是一個不同的範圍。

0
a #=>NameError: undefined local variable or method `a' for main:Object 

解析器無法確定這是否是局部變量或方法,如錯誤所述。

a = 2 unless true 

這裏的解析器能夠識別這是一個變量,它被定義(未初始化)。如果語句被執行,它將被初始化。未初始化的變量評估爲零。