精简脚本如下:
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/