为什么以下表达式会解决它们的问题?括号应该比新行具有更高的优先级,不是吗?
3 - ( 1 + 1 ) # => 1 3 - ( 1 + 1 ) # => 2
省略加号也可以使表达式求值为2:
3 - ( 1 1 ) # => 2
如果我声明为连续换行符(转义)或将加号移到第一行,则会实现所需的行为:
3 - ( 1 \ + 1 ) # => 1 3 - ( 1 + 1 ) # => 1
解决方法
这是因为Ruby将新行识别为表达式的结尾,除非表达式不完整.例如,
(1 + 1)
是相同的
(1; +1)
因为括号内的最后一个表达式被返回,所以它与1相同.这与1相同.
当你在一行的末尾时,表达式是不完整的,因此继续到下一行.这使得:
3 - ( 1 + 1 )
被解释为3 – (1 1).