2014-04-01 31 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