Evg*_*eev 8 ruby syntax line-breaks syntax-error multiline
精简脚本如下:
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",为什么没有语法错误,并且有一个例子,这种行为是有用的(或者我们应该提交请求删除它)?
Cas*_*per 12
这是一个功能,但你可能会认为这是一个错误.这是因为你能够做到这一点(很多情况下很方便):
(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