【问题标题】:Ruby - newlines and operatorsRuby - 换行符和运算符
【发布时间】:2011-01-15 13:04:45
【问题描述】:

考虑以下代码:

x = 4
y = 5
z = (y + x)

puts z

如您所料,输出为9。如果您引入换行符:

x = 4
y = 5
z = y
+ x

puts z

然后它输出5。这是有道理的,因为它被解释为两个单独的语句(z = y+x)。

但是,如果括号中有换行符,我不明白它是如何工作的:

x = 4
y = 5
z = (y
+ x)

puts z

输出为4。为什么?

【问题讨论】:

    标签: ruby operators


    【解决方案1】:

    (免责声明:我根本不是 Ruby 程序员。这只是一个疯狂的猜测。)

    使用括号,您会得到 z 的值

    y
    +x
    

    计算结果为最后执行的语句的值。

    【讨论】:

    • +1。当我意识到输出是 4 而不是 9 时,我正试图解释未完成命令的基本概念。进展顺利 :)
    • 这很有意义。我来自 Scala 中的同一个示例,它将其视为 z = (y+x) 并输出 9。很好的解释:-)
    • 多行括号本质上是一个块,块的值就是里面的最后一条语句。
    【解决方案2】:

    以 \ 结束该行,以便在下一行继续表达式。这给出了正确的输出:

    x = 4
    y = 5
    z = (y \
      + x)
    puts z
    

    输出 9

    我不知道为什么没有转义换行符的结果是意外的。我只是学会了永远不要那样做。

    【讨论】:

      【解决方案3】:

      如果您的行以运算符结束,您将不需要转义字符 \

      a = 4
      b = 5
      z = a +
          b
      
      puts z 
      # => 9
      

      【讨论】:

      • 如果我将一堆方法链接在一起,我会使用这种技术以点结束一行。
      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多