【问题标题】:Ruby 1.9.3 Teeny VersionRuby 1.9.3 小版本
【发布时间】:2026-01-01 01:45:01
【问题描述】:

当使用 RBConfig 确定我的 ruby​​ 版本时,我在使用 ruby​​ 1.9.3 时得到了“错误”的 teeny 版本:

# 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 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin10.8.0] 并且遇到与您相同的 TEENY 错误,同时使用 ConfigRbConfig
  • 我认为这是因为 1.9.3 基于 1.9.1 - ruby​​ 1.9.2 也是如此,但找不到任何说明原因的文档。我想知道如何正确检查 1.9.3 - 我应该检查补丁还是修订版?
  • 我认为这是因为链接库仍然使用 ruby​​ 1.9.1 作为版本,有人可以验证吗?

标签: ruby ruby-1.9.3


【解决方案1】:

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

RUBY_VERSIONconstant 包含发布版本号,但如果这些值对您很重要,您需要拆分点以获得 MAJOR、MINOR 和 TEENY:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    所以我猜谜团已经解决了。

    【讨论】: