试图理解ruby的优先规则的困难

时间:2014-04-01 23:14:38

标签: ruby syntax

a=[]

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

puts a.inspect

output [9]

我是红宝石的新人,我只是在尝试。

我想知道正在执行哪些操作以获得此结果以及按什么顺序。

1 个答案:

答案 0 :(得分: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