在ruby程序中管理require路径的最佳方法是什么?
让我举一个基本的例子,考虑一个结构,如:
\MyProgram \MyProgram\src\myclass.rb \MyProgram\test\mytest.rb
如果我在我的测试中使用,require '../src/myclass'
那么我只能从\MyProgram\test
文件夹中调用测试,但我希望能够从任何路径调用它!
我想出的解决方案是在所有源文件中定义以下行:
ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(ROOT)
然后总是使用 require "#{ROOT}/src/myclass"
有没有更好的方法呢?
从Ruby 1.9开始,您可以使用require_relative执行此操作:
require_relative '../src/myclass'
如果你需要这个版本的早期版本,你可以根据此SO评论从extensions gem获取它.
这是一个稍微修改过的方法:
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "src"))
通过将源路径预先添加到$ LOAD_PATH(又名$ :),当您需要代码时,您不必明确提供根等. require 'myclass'
相同,嘈杂的恕我直言:
$:.unshift File.expand_path("../../src", __FILE__) require 'myclass'
要不就
require File.expand_path "../../src/myclass", __FILE__
在(Debian)Linux上使用ruby 1.8.7和1.9.0进行测试 - 请告诉我它是否适用于Windows.
为什么一个更简单的方法(例如'use','require_relative',或者像这样的sg)没有内置到标准的lib中?更新:require_relative从1.9.x开始