避免依赖加载顺序

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

lib/my_gem.rb

 require 'base64' require 'ostruct' require 'my_gem/utils.rb' require 'my_gem/base.rb' ... 

直到最近,当gem添加了更多function并且lib/my_gem目录已经增长和增长时,这一直很好。

现在,我必须非常小心地以非常特定的顺序require我的类和模块,因为utils某些东西需要base.rb加载base.rb 但是, base.rb某些base.rb要求在此之前加载app.rb

所以它变成了:

 # require all standard libraries first require 'base64' require 'ostruct' require 'my_gem/app.rb' # be sure this is loaded before base! require 'my_gem/base.rb' # be sure this is loaded before utils! require 'my_gem/utils.rb' # be sure this is loaded before some other class! 

由于依赖顺序,我最终在这个文件中弄得一团糟,我觉得必须有更好的方法吗?

尝试使用Kernel#autoload

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

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