我真的很喜欢 rails 在 :root/app 目录中自动加载路径的方式。我想在我正在创建的 gem 中做类似的事情,而不是到处使用显式的 ruby 自动加载。
问问题
1159 次
2 回答
3
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)
}
我会String#camelize
在我的filename_to_module
函数中使用类似的东西。除非我已经依赖于ActiveSupport
.
于 2013-07-16T22:42:58.163 回答
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
于 2021-03-25T13:27:33.137 回答