Ruby需要路径

Ced*_* H. 12 ruby require

我有一个Ruby代码,在几个文件中有不同的类.在一个文件中,我开始执行.这个文件require是我的其他文件.

  • 这是启动ruby代码的好方法吗?
  • 当我从符号链接运行代码时,例如DIR2/MyRubyCode是指向主文件的链接DIR1/MyRubyCode.rb,那么我的要求将失败.我通过在之前添加路径DIR1来解决问题,但我认为有更好的方法来实现它.你对此有什么建议吗?$LOAD_PATHrequire

Ale*_*x V 17

如果您使用的是Ruby 1.9或更高版本,则用户require_relative用于您的依赖项.

require_relative 'foo_class'
require_relative 'bar_module'
Run Code Online (Sandbox Code Playgroud)


小智 16

如果要检查是否正在使用' require'编辑或执行Ruby文件ruby MyRubyCode.rb,请检查__FILE__常量.

# If the first argument to `ruby` is this file.
if $0 == __FILE__
  # Execute some stuff.
end
Run Code Online (Sandbox Code Playgroud)

至于require/$ LOAD_PATH问题,您始终可以使用require语句中的相对路径.例如:

# MyRubyCode.rb
require "#{File.dirname(__FILE__)}/foo_class"
require "#{File.dirname(__FILE__)}/bar_module"
Run Code Online (Sandbox Code Playgroud)

其中包括与目录相同的foo_class.rbbar_module.rb文件MyRubyCode.rb.

  • 请改用`require_relative` (3认同)
  • 谢谢.它适用于`$ LOAD_PATH << File.dirname(Pathname.new(File.expand_path(__ FILE __)).realpath.to_s).to_s`. (2认同)

Pic*_*olo 6

我知道这是一个老问题,但有一个更新的答案,我想发布它:

从更新版本的Ruby开始(我不确定何时),您可以通过使用以下内容来要求同一目录中的文件:

require './foo_class'
require './bar_module'
Run Code Online (Sandbox Code Playgroud)

它将加载被调用的文件foo_class.rbbar_module.rb在同一目录中.

要检查您的文件是require正常运行还是正常运行,请检查其他答案.

  • 这个答案没有解决原始问题中的用例,因为如果从符号链接调用ruby文件或者在用户的路径上,它仍然会失败. (2认同)