代码之家  ›  专栏  ›  技术社区  ›  crsuarezf

Ruby和JRuby在方法链中的差异

  •  2
  • crsuarezf  · 技术社区  · 12 年前

    今天我开始测试JRuby。我是一名Java和Ruby的开发人员,所以第一眼就喜欢这种混合。
    然后编码一点,我发现了一个区别,我想知道这是否正确。
    我使用jruby 1.7.2和ruby 1.8.7进行测试。

    在jruby控制台中,我键入:

    c = []
    c.class #=> Array
    c << 9 << 8 << 0 << 2
    c.to_s #=> "[9, 8, 0, 2]"
    

    现在,在ruby控制台中,我键入:

    c = []
    c.class #Array
    c << 9 << 8 << 0 << 2
    c.to_s #=> "9802"
    

    这里会发生什么?为什么两种情况下的结果不一样?

    1 回复  |  直到 12 年前
        1
  •  5
  •   Rich Drummond    12 年前

    您看到的差异并不是Ruby和JRuby本身的不兼容。JRuby 1.7.x默认与Ruby 1.9.3兼容,因此您实际看到的是Ruby 1.8.7和Ruby 1.9.3之间Array#to_s方法的行为差异。

    您可以通过将开关“-1.8”传递给JRuby命令或通过如下设置环境变量JRuby_OPTS来打开JRuby的1.8兼容模式:

    export JRUBY_OPTS='--1.8'.
    

    例如,这是JRuby 1.7.2的默认1.9兼容模式:

    $ JRUBY_OPTS='' irb
    > ([] << 9 << 8 << 0 << 2).to_s
    => "[9, 8, 0, 2]"
    

    以下是启用1.8兼容性后的结果:

    $ JRUBY_OPTS='--1.8' irb
    > ([] << 9 << 8 << 0 << 2).to_s
    => "9802"
    
    推荐文章