为什么括号内的换行会改变算术结果?

Fel*_*lix 6 ruby newline operators

为什么以下表达式会解决它们的问题?括号应该比新行具有更高的优先级,不是吗?

3 - ( 1 + 1 )
# => 1

3 - ( 1
     + 1 )
# => 2
Run Code Online (Sandbox Code Playgroud)

省略加号还可以使表达式求值为2:

3 - ( 1
      1 )
# => 2
Run Code Online (Sandbox Code Playgroud)

如果我声明为连续换行符(转义)或将加号移到第一行,则会实现所需的行为:

3 - ( 1 \
     + 1 )
# => 1

3 - ( 1 +
      1 )
# => 1
Run Code Online (Sandbox Code Playgroud)

saw*_*awa 5

这是因为Ruby将新行识别为表达式的结尾,除非表达式不完整.例如,

(1
+ 1)
Run Code Online (Sandbox Code Playgroud)

是相同的

(1;
+1)
Run Code Online (Sandbox Code Playgroud)

这与+1返回括号内的最后一个表达式相同.而这又是一样的1.

当你+在一行的末尾时,表达式是不完整的,因此继续到下一行.这使得:

3 - ( 1 +
      1 )
Run Code Online (Sandbox Code Playgroud)

被解释为3 - (1 + 1).