精简脚本如下:

z1 = (12 -
          2) / (5)
z2 = (12
        -  2) / (5)
puts(z1.to_s + " " + z2.to_s)

这使:
$ ruby rubytest.rb
2 -1

现在,我知道z1大小写是正确的方法,因为在行尾的悬挂运算符被解释为该行的自动延续。

但是,我希望解释器在z2情况下无法快速执行,并告诉我该语句不完整,或者其第二行是毫无意义的。但是它会“很好”地处理并给出“-1”的答案。它是否试图通过不承认自己的困惑而显得自信,并希望废话的答案会被忽略?

有人可以解释z2的评估实际上发生了什么,为什么它为“-1”,为什么没有语法错误,并且有一个示例说明这种行为是有用的(或者我们应该提出删除它的请求)?

最佳答案

这是一个功能,但您可能一开始可能认为是一个错误。出于同样的原因,您能够执行此操作(很多情况下很方便):

(call_function_1; call_function_2) if some_condition

换行符的解释与;相同。例如,您会注意到此方法的效果很好,并且仅返回了最后一个表达式,但仍然对所有表达式都进行了评估:
(1
 2
 3
 4
 5)
=> 5

一样
(1; 2; 3; 4; 5)
=> 5

要查看所有表达式都被求值,您可以尝试例如以下操作:
(puts "A"
 puts "B"
 puts "C"
 123)
A
B
C
=> 123

因此,您的示例变为:
(12; -2) / 5

与以下内容相同:
-2 / 5

这是-1

为了使Ruby将12解释为未完成的语句而不是单独的语句,您可以通过添加行继续提示\来告诉Ruby:
(12 \
 - 2) / 5
=> 2

关于Ruby-语句中错误的换行符仍然会产生结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27464275/

10-12 07:38
查看更多