load在本地路径上工作,require则不工作

时间:2011-05-13 23:59:56

标签: ruby ruby-1.9.2

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"时,这很好用。这两个文件都在同一个目录中,这就是我运行的目录。

但是如果我将负载更改为require,并且有或没有扩展我得到:

<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

2 个答案:

答案 0 :(得分:39)

如果只提供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.'

答案 1 :(得分:5)

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

结帐documentation,我找到了require_relative

require_relative 'loadee'

适用于1.9.22.1.2

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