3

RBConfigを使用してrubyのバージョンを判別すると、ruby1.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を返すのはなぜですか?

4

2 に答える 2

5

Rubyには、バージョンの2つの概念があります。実際のリリースバージョンと「互換性バージョン」です。すべてのRubies1.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の変更はなく、バグ修正とセキュリティパッチのみであるため、パッチレベルは通常無視できます。お役に立てば幸いです。

于 2012-11-07T16:50:53.357 に答える
1

マイナーはライブラリマイナーについて報告しているようです-わかりました。したがって、残っているのは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

およびruby1.9.2-p320this:

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

だから謎は解けたと思います。

于 2012-11-07T16:52:47.607 に答える