2011-05-13 19 views
19

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

回答

38

如果你只提供一個文件名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

4

提供的路徑與文件名似乎沒有爲我工作,我不想塞進了一堆的路徑進入我$LOAD_PATH。我發現require_relative

require_relative 'loadee' 

工作在兩個1.9.22.1.2

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