我有其他文件required.rb
和main.rb
所需的文件tester.rb
,每个文件都是单独调用并单独运行。
在required.rb
内,我想要求所需文件的子目录中的所有文件。整件事看起来像这样:
main.rb
lib/
required.rb
req_files/
req1.rb
req2.rb
req3.rb
tester/
tester.rb
导入所需文件的代码如下:
Dir[Dir.pwd + "/req_files/*.rb"].each do |file|
require file
end
在我看到的建议策略中,无论是使用Dir.pwd
还是__FILE__
,应用于required.rb
位置的上下文都是其中所需的原始文件的上下文首先,这意味着我不能支持使用当前设置分别要求这两个文件。
有没有办法表示相对于实际required.rb
的路径?
编辑:
但事实并非如此,因为对require_relative的更改要求并未改变Dir[Dir.pwd + "/req_files/*.rb"]
,更具体地Dir.pwd
解析相对于原始文件(主要或测试人员)的事实,因此无法按要求表达,也不能用于两个入口点
另请注意,required.rb
和require_relative
已经main.rb
已经需要tester.rb
。
答案 0 :(得分:0)
有没有办法表示相对于实际required.rb的路径
是的,有点儿。还有另一种方法。
http://ruby-doc.org/core-2.4.2/Kernel.html#method-i-require_relative
require_relative(string)→true或false
Ruby尝试加载名为string的库相对于require文件的路径。如果无法确定文件的路径,则引发LoadError。如果加载文件,则返回true,否则返回false。
答案 1 :(得分:0)
我对__FILE__
不正确;使用File.dirname(__FILE__)
代替Dir.pwd
可用于提供实际文件的目录与调用文件的目录。