为什么下面的表达式解决了它们的做法?括号内的优先级应高于换行符,不是吗?为什么括号内的换行符会改变算术结果?
3 - (1 + 1)
# => 1
3 - (1
+ 1)
# => 2
省略加也让表达计算为2
:
3 - (1
1)
# => 2
如果我声明作为连续换行符(转义)或移动加到第一行,期望的行为实现:
3 - (1 \
+ 1)
# => 1
3 - (1 +
1)
# => 1
为什么下面的表达式解决了它们的做法?括号内的优先级应高于换行符,不是吗?为什么括号内的换行符会改变算术结果?
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
一次,因为它是表达的最后一行它是由红宝石重新调整(如在def
最后一项则返回end
之前这样:
(3 # doing nothing
1) # returns 1
而且再次,这部分代码返回2
,因为它是括号中的最后一项:
(puts "hello!"
2) => 2