如何确定默认的Ruby LOAD_PATH?

Ale*_*nor 11 ruby require load-path

假设我编译自己的新Ruby(MRI 1.9.3),默认的LOAD_PATH是什么,如何计算?

mat*_*att 14

在我的机器上,初始加载路径如下所示:

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

有了这个grep,对Ruby源的调查导致ruby_initial_load_paths[]inversion.c定义(这是在Ruby 1.9.3上).适用的第一个(既没有NO_INITIAL_LOAD_PATHRUBY_SEARCH_PATH已经设定)是RUBY_SITE_LIB2.查看上面定义的定义,我们看到:

#define RUBY_SITE_LIB2              RUBY_SITE_LIB    "/"RUBY_LIB_VERSION
Run Code Online (Sandbox Code Playgroud)

反过来:

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
Run Code Online (Sandbox Code Playgroud)

在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目.类似地,进入此变量的其他常量对应于其他加载路径条目.

ruby_initial_load_paths[]变量用于在ruby_init_loadpath_safe()ruby.c,其中实际负载路径被设置用于该过程.

因此,您的问题的答案是#define,根据构建的配置方式,初始加载路径在编译时设置了一些s.