Ruby 1.9.3 Teeny Version

时间:2012-11-07 16:19:00

标签: ruby ruby-1.9.3

当使用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作为它的小版本?

2 个答案:

答案 0 :(得分:4)

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更改,只有错误修复和安全补丁。希望有所帮助!

答案 1 :(得分: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

ruby​​ 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

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