我在几个文件中有一个包含不同类的 Ruby 代码。在一个文件中,我开始执行。这个文件require
是我的其他文件。
- 这是开始 ruby 代码的好方法吗?
- 当我从符号链接运行代码时,例如
DIR2/MyRubyCode
是指向主文件的链接DIR1/MyRubyCode.rb
,那么我的要求将失败。DIR1
我通过在$LOAD_PATH
之前添加路径解决了这个问题require
,但我认为会有更好的方法来做到这一点。你对此有什么建议吗?
如果您使用 Ruby 1.9 或更高版本,请使用 require_relative 作为您的依赖项。
require_relative 'foo_class'
require_relative 'bar_module'
如果你想检查一个 Ruby 文件是被 ' require
'ed 还是用 ' 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
。
我知道这是一个老问题,但有一个更新的答案,我想发布它:
从较新版本的 Ruby 开始(我不确定何时),您可以使用以下命令要求同一目录中的文件:
require './foo_class'
require './bar_module'
它会加载在同一个目录中调用foo_class.rb
的文件。bar_module.rb
要检查您的文件是require
d 还是正常运行,请检查另一个答案。