Ruby如何知道在哪里可以找到所需的文件?

eri*_*223 5 ruby ruby-on-rails require

这是一个新手问题:

require 'tasks/rails'
Run Code Online (Sandbox Code Playgroud)

我在每个rails项目的根路径中看到了Rakefile中的这一行.我想这行用于要求vendor/rails/railties/lib/tasks/rails.rb来加载所有rake任务:

$VERBOSE = nil
# Load Rails rakefile extensions
Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
# Load any custom rakefile extensions
Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么只为require方法指定了'tasks/rails',而不是文件的完整路径?

提前致谢.

Lol*_*ath 13

当你启动你的rails应用程序时,它会运行config/boot.rb来调用Rails::Initializer.set_load_path和设置$LOAD_PATH.

Ruby使用该目录列表来查找require一行中指定的文件.如果你给它一个绝对路径require '/home/lolindrath/ruby/lib.rb',就会跳过那个搜索.

这大致类似于#include <stdlib.h>C/C++,它搜索您给编译器找到该头文件的include路径.