2016-02-29 44 views
6

为什么下面的表达式解决了它们的做法?括号内的优先级应高于换行符,不是吗?为什么括号内的换行符会改变算术结果?

3 - (1 + 1) 
# => 1 

3 - (1 
    + 1) 
# => 2 

省略加也让表达计算为2

3 - (1 
     1) 
# => 2 

如果我声明作为连续换行符(转义)或移动加到第一行,期望的行为实现:

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

3 - (1 + 
     1) 
# => 1 

回答

5

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

(1 
+ 1) 

相同

(1; 
+1) 

其是相同+1由于返回的括号内的最后一个表达式。这与1更相似。

如果在行尾有+,则表达式不完整,因此会继续到下一行。这使得:

3 - (1 + 
     1) 

被解释为3 - (1 + 1)

2

如果你在括号中有代码,那么如果你不会用\结尾,或者用数学运算符开始新行,那么每行都将作为分隔代码的威胁。

所以在你的例子:

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 
相关问题