我注意到&&
运算符与字符串连接相结合的一些行为。
nil + "string"
# => NoMethodError: undefined method `+' for nil:NilClass
a = (nil && nil)
# => nil
a + "string"
# => NoMethodError: undefined method `+' for nil:NilClass
nil && nil + "string"
# => nil
有人可以解释一下吗?
答案 0 :(得分:3)
nil && nil + "string"
与
相同nil && (nil + "string")
因为+
具有更高的优先级。由于&&
返回左操作数,如果其nil
或false
然后短路(不打算计算正确的操作数),您永远不会看到NoMethodError
这将来自评估nil + "string"
。
答案 1 :(得分:2)
这是因为&&
短路。 (A && B
仅在B
为真值时)评估A
nil
是一个假值。 <{1}}中的nil + "string"
未被评估。
(nil && nil + "string"
相当于nil && nil + "string"
,因为&&
has lower precedence than +
)