2

今天我开始测试 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"

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

4

1 回答 1

5

您看到的区别并不是 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"
于 2013-02-21T03:18:36.897 回答