负荷工作本地路径上,要求不

问题描述:

loadee.rb负荷工作本地路径上,要求不

puts '> This is the second file.' 

loaddemo.rb

puts 'This is the first (master) program file.' 
load 'loadee.rb' 
puts 'And back again to the first file.' 

当我运行"ruby loaddemo.rb",这工作得很好。这两个文件都在同一个目录中,这就是我从中运行的目录。

但是,如果我改变负载的要求,并带有或不带扩展我得到:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load 
-- loadee.rb (LoadError) 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from loaddemo.rb:2:in `<main>' 

我的问题是,当然,为什么不要求在这种情况下工作?它应该,对吧?是否加载并需要使用不同的路径?

的Ruby版本1.9.2

如果你只提供一个文件名require,只会看在预定义$LOAD_PATH目录。不过,如果你提供你的文件名的路径,它应该工作:

puts 'This is the first (master) program file.' 
require './loadee.rb' 
puts 'And back again to the first file.' 

你也可以添加你的项目的文件夹到负载路径,而不是:

$LOAD_PATH.unshift File.dirname(__FILE__) 
puts 'This is the first (master) program file.' 
require 'loadee.rb' 
puts 'And back again to the first file.' 

而在去年,你可以只使用require_relative而不是:

puts 'This is the first (master) program file.' 
require_relative 'loadee.rb' 
puts 'And back again to the first file.' 
+2

那么为什么装载没有路径工作?它使用不同的路径变量吗? – 2011-05-14 00:12:38

+1

这实际上被列为红宝石的bug现在。 1.9使用'require'时,从加载路径中删除了“当前目录”,但不是'load'。 http://redmine.ruby-lang.org/issues/2710 – 2011-05-14 00:15:14

+2

另外,请记住,每次使用'load'时,它会评估整个文件,而使用'require'只会在您第一次需要时评估文件它。 – 2011-05-14 00:16:37

提供的路径与文件名似乎没有为我工作,我不想塞进了一堆的路径进入我$LOAD_PATH。我发现require_relative

require_relative 'loadee' 

工作在两个1.9.22.1.2

documentation指示require根本不打算搜索相对路径,也不是load