了解Ruby中的加载路径

时间:2016-06-10 09:10:13

标签: ruby

我正在使用一个库,其中包含许多由协议缓冲区为ruby生成的ruby文件。

/path/to/source_folder/lib_name/level_1/level_2/level_3

中的文件的require路径示例如下所示
require 'lib_name/level_1/level_2/level_3/file_name_1' 
require 'lib_name/level_1/level_2/level_3/file_name_2' 

所有必需的文件和文件夹都包含在source_folder内的某个位置。如果这个例子是在C ++中,那么我们可以使用

运行它
g++ file_name.cpp -I "/path/to/source_folder"

我无法真正更改require_relative的所有要求并更改主代码,因为它太麻烦了。我试图找到一种简单的方法来运行我的文件。

1 个答案:

答案 0 :(得分:1)

我有两个解决方案。

% tree .
.
├── lib
│   └── dir1
│       └── dir2
│           ├── a.rb
│           └── b.rb
└── main.rb

% cat a.rb
def method_a
  puts :execute_a
end

% cat b.rb
def method_b
  puts :execute_b
end

No.1添加加载路径所有子目录

def add_load_path_recursive(dir)
  Dir.glob(dir + "/**/*/").each do |dir|
    $LOAD_PATH << File.expand_path(dir)
  end
end

add_load_path_recursive "./lib"

require 'a'
require 'b'

method_a
method_b

No.2需要所有'rb'文件(递归)

def require_recursive(dir)
  Dir.glob(dir + "/**/*.rb").each do |dir|
    require File.expand_path(dir)
  end
end

require_recursive "./lib"

method_a
method_b