我最近升级到Ruby 2.1.3,令我惊讶的是我开始遇到一些语法错误。问题的最小实例可以在这里看到:
{blah: if true then :bleh end}
在Ruby 2.1.2中产生:
=> {:blah=>:bleh}
而在2.1.3中产生:
SyntaxError: (irb):1: syntax error, unexpected modifier_if
{blah: if true then :bleh end}
^
更现实的例子是:
{blah: bleh
blih: if false
blah
elsif true
bloh
else
bluh
end}
(是的,编写这样的代码并不常见,我知道,但我习惯于在Haskell中使用它,我认为它使得代码非常简洁和可读。)
Ruby 2.1.3在这里是否破坏了向后兼容性?如果是这样,根据语义版本控制的规则,这应该是一个错误,对吗?
或者在不知不觉中我滥用了修补程序的错误?
是否有一些(其他)方式将if-conditions写为表达式?
答案 0 :(得分:3)
已在ruby论坛上报告该错误。通过此链接了解最新信息:
https://bugs.ruby-lang.org/issues/10279
我们可以看到:
在标签之后,新表达式应该开始,不能是修饰符
在ruby 2.1.3中执行此操作的正确方法应该是:
2.1.3 :006 > {blah: (if true then :bleh end)}
=> {:blah=>:bleh}