Ruby中减号运算结果为何受换行符影响?
为什么Ruby中第二个puts语句输出-2而非预期的-1?
先看你的代码和实际输出:
代码:
x = 1 y = 2 puts ( x - y ) puts ( x - y ) puts ( x - y )
输出:
-1 -2 -1
问题核心在于Ruby对换行的解析规则:
- 第一个
puts里,x -在行尾结束,Ruby会判定这是二元减号运算符的不完整表达式,需要后续操作数,因此换行后的y会被当作减号的右操作数,实际计算的是x - y,结果为-1。 - 第二个
puts里,x单独占一行,已经是完整表达式。下一行的- y会被Ruby解析为一元负号运算符作用于y,也就是计算-y。而Ruby的括号内如果有多个换行分隔的表达式,会依次执行并返回最后一个表达式的结果,这里就是-y的值-2,所以最终输出-2。 - 第三个
puts是标准单行表达式,直接计算x - y,结果自然是-1。
简单来说:换行的位置决定了Ruby把-当成二元减号还是一元负号,再结合括号内多表达式返回最后结果的规则,就导致了第二个输出的差异。
内容的提问来源于stack exchange,提问作者Marc Ihm
相关产品推荐
相关产品推荐

