避免依赖加载顺序

时间:2015-10-31 13:36:44

标签: ruby

我正在写一个看起来如此的宝石:

Map

lib/my_gem.rb

直到最近,当gem添加了更多功能并且require 'base64' require 'ostruct' require 'my_gem/utils.rb' require 'my_gem/base.rb' ... 目录已经增长并增长时,这一直很好。

现在,我必须非常小心lib/my_gem我的课程和模块按照特定的顺序,因为require中的某些内容要求首先加载utils。但是,base.rb中的某些内容要求在此之前加载base.rb

所以它变成了:

app.rb

由于依赖顺序,我最终弄乱了这个文件,我觉得必须有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

尝试使用Kernel#autoload

require 'base64'
require 'ostruct'
autoload :SomeModule, 'my_gem/app.rb'
autoload :AnotherModule, 'my_gem/base.rb'
autoload :SomeClass, 'my_gem/utils.rb'

这个想法是在使用源文件中定义的模块/类之前不会加载源文件,因此您不需要处理需要源文件的顺序。