a=[]
a << 4 && a[0]+=1 && a[0]+=1 if a==[]
puts a.inspect
output [9]
我是红宝石的新人,我只是在尝试。
我想知道正在执行哪些操作以获得此结果以及按什么顺序。
答案 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