Ruby 加载在本地路径上工作,不需要';T

Ruby 加载在本地路径上工作,不需要';T,ruby,ruby-1.9.2,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,无论是否有扩展,我都

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>'
:29:in'require':没有要加载的此类文件
--loadee.rb(LoadError)
from:29:in'require'
从loaddemo.rb:2:in`'
我的问题当然是,为什么在这种情况下不需要工作?应该是吧?加载和要求使用不同的路径吗


Ruby 1.9.2版

如果您只提供一个文件名来
要求
,它将只在预定义的
$LOAD\u路径
目录中查找。但是,如果您提供带有文件名的路径,它应该可以工作:

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\u relative

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

提供一个带有文件名的路径似乎对我不起作用,我不想把一堆路径塞进我的
$LOAD\u path

查看时,我发现
需要\u relative

require_relative 'loadee'
适用于
1.9.2
2.1.2


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

也不打算搜索相对路径,那么为什么没有路径的情况下load可以工作呢?它使用不同的路径变量吗?这实际上是ruby目前的一个bug。1.9在使用
require
时,从加载路径中删除了“当前目录”,但在
load
中没有删除。另外,请记住,每次使用
load
,它都会计算整个文件,而使用
require
只会在第一次需要时计算文件。