2012-11-07 56 views
3

當使用RBConfig確定我的紅寶石版本,使用Ruby 1.9.3時,我得到了 「錯誤」 的蠅頭版本:的Ruby 1.9.3版本蠅頭

# ruby -v 
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux] 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(MAJOR))' 
1 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(MINOR))' 
9 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(TEENY))' 
1 

使用Ruby 1.8.7 - 這工作得很好:

$ ruby -v 
ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(MAJOR))' 
1 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(MINOR))' 
8 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(TEENY))' 
7 

我知道我可以得到patchlevel並使用那一點,但爲什麼是紅寶石1.9.3返回1作爲它的小版本?

+1

我正在使用'ruby 1.9.3p194(2012-04-20修訂版35410)[x86_64-darwin10.8.0]',並且使用'Config'和'RbConfig'來得到和你一樣的'TEENY'錯誤 – AGS

+0

我認爲這是因爲1.9.3是基於1.9.1的 - 正如ruby 1.9.2一樣,但是找不到任何文件說明原因。我想知道如何正確檢查1.9.3 - 我應該檢查修補程序還是修訂版? – Michael

+0

我認爲這是因爲鏈接庫仍然使用ruby 1.9.1作爲版本,任何人都可以驗證這一點嗎? – Michael

回答

4

Ruby有兩個版本的概念:實際版本和「兼容版本」。對於所有紅寶石1.9.1 - > 1.9.3,兼容版本爲1.9.1,因爲它們全都向後兼容1.9.1版本。

RUBY_VERSION常量包含發行版本號,但你需要分割點來獲得主,次,和蠅頭如果這些價值觀是很重要的你:

>> major, minor, teeny = RUBY_VERSION.split(".") 
=> ["1", "9", "3"] 
>> teeny 
=> "3" 

這就是說,紅寶石版本數字特別設計成ASCII可比,所以經常可以看到這樣的代碼進行簡單的版本檢查:

if RUBY_VERSION >= "1.9.3" 
    #... 
end 

補丁級別通常可以忽略不計,因爲在補丁級別版本沒有API的變化,只錯誤修復和安全rity補丁。希望有所幫助!

+0

謝謝 - 得出同樣的結論 – Michael

1

看起來像Minor只是報告圖書館輕微 - 好吧。所以我只剩下ruby_version字符串 - 總比沒有好。

# /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby.so.1.9.1 
# /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(ruby_version))' 
1.9.3-p286 

紅寶石1.8顯示了這個:

$ /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby1.8.so.1.8.7 

和Ruby 1.9.2-P320這樣的:

$ ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby.so.1.9.1 

所以我想解開了謎底。

相關問題