1
a=[]
a << 4 && a[0]+=1 && a[0]+=1 if a==[]
puts a.inspect
output [9]
我是ruby中的新手,我只是在尝试一些东西。试图理解ruby的优先规则的困难
我想知道正在执行哪些操作来获得此结果以及以何种顺序进行。
a=[]
a << 4 && a[0]+=1 && a[0]+=1 if a==[]
puts a.inspect
output [9]
我是ruby中的新手,我只是在尝试一些东西。试图理解ruby的优先规则的困难
我想知道正在执行哪些操作来获得此结果以及以何种顺序进行。
我将大大简化您的示例。我猜你对你为什么得到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
你的问题是什么? –
您可能会发现从较小的示例开始并以感应方式建立您的理解更容易... –
对不起,有人更改我的标题,我想知道计算机在做什么,计算什么操作和顺序。 – jorar91