自分の新しい Ruby (MRI 1.9.3) をコンパイルすると仮定すると、デフォルトの LOAD_PATH は何ですか? また、それはどのように計算されますか?
2 に答える
私のマシンでは、初期ロード パスは次のようになります。
$ ruby -e 'puts $LOAD_PATH'
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0
で武装しgrep
、Ruby ソースを調査するとinの定義にruby_initial_load_paths[]
version.c
つながります(これは Ruby 1.9.3 上にあります)。これらのうち最初に適用される (設定されていない、NO_INITIAL_LOAD_PATH
またはRUBY_SEARCH_PATH
設定されていない) はRUBY_SITE_LIB2
です。その定義の上の定義を見ると、次のことがわかります。
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
そして順番に:
#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
この一連の定義をたどると、これが上記のロード パスの最初のエントリに対応していることが明らかになります。同様に、この変数に入る他の定数は、他のロード パス エントリに対応します。
ruby_initial_load_paths[]
変数は で使用されruby_init_loadpath_safe()
、ruby.c
プロセスの実際のロード パスが設定されます。
#define
したがって、あなたの質問に対する答えは、ビルドの構成方法に応じて、コンパイル時にいくつかの s を使用して初期ロード パスが設定されるということです。
コンパイルにより、* nix ベースのシステムに lib ディレクトリが作成されます。一般的には
/usr/lib/ruby/X.Y.Z
XYZ は、Ruby C API バージョンのバージョン番号を表します。