11

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

  • 这是开始 ruby​​ 代码的好方法吗?
  • 当我从符号链接运行代码时,例如DIR2/MyRubyCode是指向主文件的链接DIR1/MyRubyCode.rb,那么我的要求将失败。DIR1我通过在$LOAD_PATH之前添加路径解决了这个问题require,但我认为会有更好的方法来做到这一点。你对此有什么建议吗?
4

3 回答 3

17

如果您使用 Ruby 1.9 或更高版本,请使用 require_relative 作为您的依赖项。

require_relative 'foo_class'
require_relative 'bar_module'
于 2013-12-16T18:51:42.943 回答
16

如果你想检查一个 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.rbbar_module.rb文件在同一目录中MyRubyCode.rb

于 2010-08-29T17:08:48.767 回答
7

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

从较新版本的 Ruby 开始(我不确定何时),您可以使用以下命令要求同一目录中的文件:

require './foo_class'
require './bar_module'

它会加载在同一个目录中调用foo_class.rb的文件。bar_module.rb

要检查您的文件是required 还是正常运行,请检查另一个答案。

于 2013-06-01T23:24:08.110 回答