12

自分の新しい Ruby (MRI 1.9.3) をコンパイルすると仮定すると、デフォルトの LOAD_PATH は何ですか? また、それはどのように計算されますか?

4

2 に答える 2

15

私のマシンでは、初期ロード パスは次のようになります。

$ 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 を使用して初期ロード パスが設定されるということです。

于 2012-05-31T21:55:02.310 に答える
0

コンパイルにより、* nix ベースのシステムに lib ディレクトリが作成されます。一般的には

/usr/lib/ruby/X.Y.Z

XYZ は、Ruby C API バージョンのバージョン番号を表します。

于 2012-05-31T16:56:27.280 に答える