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_PATH或RUBY_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.
| 归档时间: |
|
| 查看次数: |
3998 次 |
| 最近记录: |