Ruby 1.9.3少年版

Mic*_*ael 3 ruby ruby-1.9.3

当使用RBConfig确定我的红宝石版本时,使用红宝石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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*own 5

Ruby有两个版本概念:实际发行版本和“兼容版本”。对于所有Ruby 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"
Run Code Online (Sandbox Code Playgroud)

就是说,Ruby版本号是专门设计为可与ASCII进行比较的,因此,看到这样的代码来进行简单的版本检查是很常见的:

if RUBY_VERSION >= "1.9.3"
  #...
end
Run Code Online (Sandbox Code Playgroud)

补丁程序级别通常可以忽略,因为补丁程序级别发行版中没有API更改,只有漏洞修复和安全补丁程序。希望有帮助!