我有一个Ruby代码,在几个文件中有不同的类。在一个文件中,我开始执行。此文件require
是我的其他文件。
DIR2/MyRubyCode
是指向主文件DIR1/MyRubyCode.rb
的链接,那么我的要求将失败。我通过在DIR1
之前将路径$LOAD_PATH
添加到require
来解决了这个问题,但我认为有更好的方法可以做到这一点。你有什么建议吗?答案 0 :(得分:17)
如果您使用的是Ruby 1.9或更高版本,请为依赖项用户使用require_relative。
require_relative 'foo_class'
require_relative 'bar_module'
答案 1 :(得分:16)
如果您想检查Ruby文件是“require
”还是使用“ruby MyRubyCode.rb
”执行,请检查__FILE__
常量。
# If the first argument to `ruby` is this file.
if $0 == __FILE__
# Execute some stuff.
end
就require / $ LOAD_PATH问题而言,您始终可以使用require语句中的相对路径。例如:
# MyRubyCode.rb
require "#{File.dirname(__FILE__)}/foo_class"
require "#{File.dirname(__FILE__)}/bar_module"
将foo_class.rb
和bar_module.rb
文件包含在与MyRubyCode.rb
相同的目录中。
答案 2 :(得分:6)
我知道这是一个老问题,但有一个更新的答案,我想发布它:
从更新版本的Ruby开始(我不确定何时),您可以使用以下命令在同一目录中要求文件:
require './foo_class'
require './bar_module'
它会在同一目录中加载名为foo_class.rb
和bar_module.rb
的文件。
要检查您的文件是require
d还是正常运行,请检查另一个答案。