【问题标题】:Why do newlines within parenthesis change arithmetic results?为什么括号内的换行符会改变算术结果?
【发布时间】:2016-02-29 19:03:35
【问题描述】:

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

3 - ( 1 + 1 )
# => 1

3 - ( 1
     + 1 )
# => 2

省略加号也会让表达式计算为2

3 - ( 1
      1 )
# => 2

如果我声明为连续换行符(转义)或将加号移到第一行,则达到预期的行为:

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

3 - ( 1 +
      1 )
# => 1

【问题讨论】:

    标签: ruby operators newline


    【解决方案1】:

    这是因为 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,因为它是表达式的最后一行,它由 Ruby 重新调整(就像在 def 中返回 end 之前的最后一项。所以:

      ( 3   # doing nothing
        1 ) # returns 1
      

      还请看下面。同样,这部分代码返回2,因为它是括号中的最后一项:

      ( puts "hello!"
        2 ) => 2
      

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2020-12-23
        • 2012-02-26
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        • 2020-12-01
        • 2019-02-18
        相关资源
        最近更新 更多