负荷工作本地路径上,要求不
问题描述:
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
答
如果你只提供一个文件名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
。
documentation指示require
根本不打算搜索相对路径,也不是load
。
那么为什么装载没有路径工作?它使用不同的路径变量吗? – 2011-05-14 00:12:38
这实际上被列为红宝石的bug现在。 1.9使用'require'时,从加载路径中删除了“当前目录”,但不是'load'。 http://redmine.ruby-lang.org/issues/2710 – 2011-05-14 00:15:14
另外,请记住,每次使用'load'时,它会评估整个文件,而使用'require'只会在您第一次需要时评估文件它。 – 2011-05-14 00:16:37