零和连接行为(nil&& nil +“string”)

时间:2014-07-12 07:43:37

标签: ruby

我注意到&&运算符与字符串连接相结合的一些行为。

nil + "string"
# => NoMethodError: undefined method `+' for nil:NilClass

a = (nil && nil)
# => nil
a + "string"
# => NoMethodError: undefined method `+' for nil:NilClass

nil && nil + "string"
# => nil

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

这只是operator precedence

nil && nil + "string"

相同
nil && (nil + "string")

因为+具有更高的优先级。由于&&返回左操作数,如果其nilfalse然后短路(不打算计算正确的操作数),您永远不会看到NoMethodError这将来自评估nil + "string"

答案 1 :(得分:2)

这是因为&&短路。 (A && B仅在B为真值时)评估A

nil是一个假值。 <{1}}中的nil + "string"未被评估。

nil && nil + "string"相当于nil && nil + "string",因为&& has lower precedence than +