我对this有一般了解。它是运算符优先级图表。移位运算符的优先级高于逻辑运算符(&& ||)。我有这样的情况,其中arr
是一个数组,派对是nil
:
arr << party && party[3]
现在,当我这样做时,我认为如果聚会是零而不是聚会[]永远不会被召唤。当然,因为&lt;&lt;它首先尝试这个优先级更高:
arr << party
但接下来会发生什么? ruby然后这样做:
arr << party[3]
请注意,我使用最高运算符()来解决问题:
arr << (party && party[3])
答案 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
。其中一个false
,nil
和party[3]
。如果你不想用虚假价值做任何事情,那么做这样的事情会更好
arr << party[3] if party