23

加载者.rb

puts '> This is the second file.'

加载演示.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>'

我的问题当然是,为什么不需要在这种情况下工作?应该是吧?load 和 require 使用不同的路径吗?

红宝石版本 1.9.2

4

2 回答 2

42

如果您只为 提供一个文件名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.'
于 2011-05-14T00:08:01.307 回答
7

提供带有文件名的路径似乎对我不起作用,我不想将一堆路径塞进我的$LOAD_PATH.

查看文档,我发现require_relative

require_relative 'loadee'

适用于1.9.22.1.2

文档表明require根本不打算搜索相对路径,load.

于 2014-06-19T01:04:13.173 回答