移位运算符

时间:2017-03-24 21:31:42

标签: ruby

我对this有一般了解。它是运算符优先级图表。移位运算符的优先级高于逻辑运算符(&& ||)。我有这样的情况,其中arr是一个数组,派对是nil

arr << party && party[3]

现在,当我这样做时,我认为如果聚会是零而不是聚会[]永远不会被召唤。当然,因为&lt;&lt;它首先尝试这个优先级更高:

arr << party

但接下来会发生什么? ruby然后这样做:

arr << party[3]

请注意,我使用最高运算符()来解决问题:

arr << (party && party[3])

1 个答案:

答案 0 :(得分:3)

数组上的

<<运算符返回数组。因此,如果party为nil,nil将被推送到arr,然后party[3]被评估为布尔表达式的一部分(因为表达式的左侧部分是真实的并且没有&#39} ; t短路)。由于party为零,因此会出现错误。

实际上,<<运算符已解析为Array类的<<方法。这与push非常相似。但作为运营商,它有不同的优先权,是的。如果您使用某种方法,它的效果会更像您期望的那样。

arr.push party && party[3] # => [nil]
arr.<< party && party[3] # => [nil]

我,我把括号放在任何地方,甚至是怀疑的阴影。

arr.push(party && party[3])

此外,不确定意图,但您的代码中可能存在一些小错误。上面的行总是将某些内容推送到arr。其中一个falsenilparty[3]。如果你不想用虚假价值做任何事情,那么做这样的事情会更好

arr << party[3] if party