Ruby是否与if-else表达式的版本2.1.3向后兼容?

时间:2014-09-24 10:40:24

标签: ruby ruby-2.1.3

我最近升级到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写为表达式?

1 个答案:

答案 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}