我正在写一个看起来如此的宝石:
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
由于依赖顺序,我最终弄乱了这个文件,我觉得必须有更好的方法吗?
答案 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'
这个想法是在使用源文件中定义的模块/类之前不会加载源文件,因此您不需要处理需要源文件的顺序。