我非常喜欢rails:root / app目录中的rails自动加载路径。我想在我创建的gem中做类似的事情,而不是在任何地方使用显式的ruby自动加载。
答案 0 :(得分:2)
Autoload定义从模块(通过符号或字符串)到文件名的映射。
如果要自动加载目录中的所有文件,则需要一种方法来了解文件所代表的模块,而无需打开它。
您可以按照命名约定来实现此目的。假设您将约定封装在方法filename_to_module
中,那么您需要做的就是递归遍历文件夹并调用autoload(filename_to_module(filename), filename)
这样的事情:
libdirs = File.join("**", "lib")
Dir.glob(libdirs).each{ |filename|
autoload( filename_to_module(filename), filename)
}
我在filename_to_module
函数中使用String#camelize
之类的内容。我可能自己实现它,除非我已经依赖ActiveSupport
。
答案 1 :(得分:0)
您也可以使用 rails 的 activesupport。
添加到您的 gemfile:
gem 'activesupport', require: 'active_support/dependencies'
然后你可以自动加载:ActiveSupport::Dependencies.autoload_paths += %w[your/path/here]
感谢 Nando Vieira:https://nandovieira.com.br/usando-o-autoloading-do-activesupport