为什么括号内的换行符会改变算术结果?
Why do newlines within parenthesis change arithmetic results?
为什么以下表达式会这样解析?括号的优先级应该高于换行符,不是吗?
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)
。
如果括号中有代码,那么如果您不以 \
结尾或不以数学运算符开始新的代码行,那么每一行都将作为单独的代码行受到威胁。
所以在你的例子中:
def plus_minus_if_you_understand_this_the_problem_is_solved_i_guess
3 - (1
1 )
end
表示我有数字 3
并且想减去括号中的表达式。在括号中我有第 1 行编号 1
和第 2 行编号 1
并且因为它是表达式的最后一行它被 Ruby 重新调整(就像在 def
最后返回 end
之前的项目。因此:
( 3 # doing nothing
1 ) # returns 1
也请看下面。同样,这部分代码 returns 2
因为它是括号中的最后一项:
( puts "hello!"
2 ) => 2
为什么以下表达式会这样解析?括号的优先级应该高于换行符,不是吗?
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)
。
如果括号中有代码,那么如果您不以 \
结尾或不以数学运算符开始新的代码行,那么每一行都将作为单独的代码行受到威胁。
所以在你的例子中:
def plus_minus_if_you_understand_this_the_problem_is_solved_i_guess
3 - (1
1 )
end
表示我有数字 3
并且想减去括号中的表达式。在括号中我有第 1 行编号 1
和第 2 行编号 1
并且因为它是表达式的最后一行它被 Ruby 重新调整(就像在 def
最后返回 end
之前的项目。因此:
( 3 # doing nothing
1 ) # returns 1
也请看下面。同样,这部分代码 returns 2
因为它是括号中的最后一项:
( puts "hello!"
2 ) => 2