3

我真的很喜欢 rails 在 :root/app 目录中自动加载路径的方式。我想在我正在创建的 gem 中做类似的事情,而不是到处使用显式的 ruby​​ 自动加载。

4

2 回答 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 回答