我正在使用一个库,其中包含许多由协议缓冲区为ruby生成的ruby文件。
/path/to/source_folder/lib_name/level_1/level_2/level_3
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
的所有要求并更改主代码,因为它太麻烦了。我试图找到一种简单的方法来运行我的文件。
答案 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