load在本地路径上工作,require则不工作
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,并且有或没有扩展我得到:
:29:in `require': no such file to load -- loadee.rb (LoadError) from :29:in `require' from loaddemo.rb:2:in `'
我的问题当然是,为什么在这种情况下不需要工作? 它应该,对吗? 加载并要求使用不同的路径?
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.'
提供带文件名的路径似乎对我不起作用,我不想把一堆路径塞进我的$LOAD_PATH
。
检查文档 ,我发现require_relative
。
require_relative 'loadee'
适用于1.9.2
和2.1.2
。
该文档表明, require
根本不是要搜索相对路径,也不是load
。