提炼出来的脚本如下:
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/