红宝石1.9.3版本蝇头(Ruby 1.9.3 Teeny Version)

2019-07-03 15:56发布

当使用RBConfig确定我的红宝石版本,我使用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作为其极小的版本?

Answer 1:

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"

这就是说,Ruby的版本号是专门设计成ASCII可比,所以经常可以看到这样的简单版本检查代码:

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

补丁级别通常可以忽略不计,因为在补丁级别版本没有API的变化,只有错误修复和安全补丁。 希望帮助!



Answer 2:

貌似未成年人只是在图书馆未成年报告 - 确定。 因此,所有我留下的是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

所以我想解开了谜底。



文章来源: Ruby 1.9.3 Teeny Version