避免依赖加载顺序
我正在写一个看起来如此的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'
我们的想法是,在使用源文件中定义的模块/类之前,不会加载源文件,因此您无需处理需要源文件的顺序。
- Ruby 2.0.0 String#Match ArgumentError:UTF-8中的无效字节序列
- 使用Mechanize获取JavaScript变量
- 是否可以根据使用的标签(或不使用)在Cucumber步骤中执行不同的操作?
- Ruby:解析,替换和评估字符串公式
- capistrano – NameError:未初始化的常量Net :: SSH :: KnownHosts :: SUPPORTED_TYPE
- 在缓存中找不到元素 – 自从在Selenium Ruby Web驱动程序中查找以来页面可能已更改?
- Gem unf_ext无法构建gem原生扩展
- 为什么很多人在Rails中使用“ – %>”而不是“%>”?
- Rails日志中的完整URL