2014-04-01 34 views
1
a=[] 

a << 4 && a[0]+=1 && a[0]+=1 if a==[] 

puts a.inspect 

output [9] 

我是ruby中的新手,我只是在嘗試一些東西。試圖理解ruby的優先規則的困難

我想知道正在執行哪些操作來獲得此結果以及以何種順序進行。

+1

你的問題是什麼? –

+0

您可能會發現從較小的示例開始並以感應方式建立您的理解更容易... –

+0

對不起,有人更改我的標題,我想知道計算機在做什麼,計算什麼操作和順序。 – jorar91

回答

2

我將大大簡化您的示例。我猜你對你爲什麼得到9而不是6(4 + 1 + 1)感到困惑。這都是因爲&&的優先級高於+

下面是您的代碼的簡化版本。

a = 4 
a += 1 && a += 1 
puts a.inspect #=> 9 

發生了什麼事是你&&是有約束力的,然後再到+操作後綁定。這意味着你的代碼其實更像是這樣的:

a = 4 
a += (1 && a += 1) 
puts a.inspect #=> 9 

如果你自己加括號,你會得到更多你所期望的東西。

a = 4 
(a += 1) && (a += 1) 
puts a.inspect #=> 6 

真的不過,你永遠不會使用&&這樣的,因爲你並不總是得到你所期望的......


其他棘手的事情,那if語句的簡寫。這是一樣的:

if a == [] 
    a << 4 && a[0]+=1 && a[0]+=1 
end