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 に答える