2013-02-21 25 views
2

今天我開始測試JRuby。我是一名Java開發人員,所以我乍一看喜歡這種混合。
然後編碼一點點,我發現一個區別,我想知道這是否正確。
我使用jruby 1.7.2和ruby 1.8.7進行測試。Ruby和JRuby在方法鏈上的區別

在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" 

什麼都可以在這裏發生的事情,爲什麼結果是不兩種情況下都一樣嗎?

+0

可能只是打印輸出......? – Jwosty 2013-02-21 03:16:33

+0

我不明白嗎? – crsuarezf 2013-02-21 03:59:12

回答

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 0.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" 
相關問題