Ruby 1.9.3 Teeny Version

当使用RBConfig来确定我的ruby版本时,在使用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 

我知道我可以获得补丁级别并使用它,但为什么ruby 1.9.3返回1作为它的小版本?

Ruby有两个版本概念:实际发行版本和“兼容版本”。 对于所有Rubies 1.9.1 – > 1.9.3,兼容性版本是1.9.1 ,因为它们都与1.9.1版本向后兼容。

RUBY_VERSION常量包含发行版本号,但如果这些值对您很重要,则需要拆分点以获得MAJOR,MINOR和TEENY:

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

也就是说,Ruby版本号是专门设计为ASCII可比的,因此通常可以看到这样的代码用于简单的版本检查:

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

通常可以忽略修补程序级别,因为修补程序级别版本中没有API更改,只有错误修复和安全修补程序。 希望有所帮助!

看起来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 

ruby 1.8显示了这个:

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

和ruby1.9.2-p320这个:

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

所以我觉得神秘已经解决了。