出于某种原因,我在某个项目上工作的人创建了一个像这样进行自动加载的宝石:
[
[:Utils, 'utils.rb'],
[:VERSION, 'version.rb'],
[:SomeOtherClass, 'some_other_class.rb'],
].each do |sym, fn|
autoload sym, File.join(MyGem.gem_root, 'lib/my_gem', fn)
end
其中MyGem.gem_root给出了宝石位置的绝对路径,例如/路径/到/ my_gem。我很好奇为什么这可能比我们依赖正确设置gem loadpath的地方更好(或更糟):
[
[:Utils, 'utils'],
[:VERSION, 'version'],
[:SomeOtherClass, 'some_other_class'],
].each do |sym, fn|
autoload sym, File.join(my_gem, fn)
end
就我个人而言,我觉得这更令人愉快(尽管代码重复)。
autoload :Utils, 'my_gem/utils'
autoload :VERSION, 'my_gem/version'
autoload :SomeOtherClass, 'my_gem/some_other_class'
无论如何,如果有的话,哪种方式更好?
答案 0 :(得分:0)
就像在shell脚本中一样,最后两个代码块会使您处于PATH
环境变量中的任何反复无常的值。它可能会也可能不会加载正确的文件......
图片,例如,一个销售的宝石和PATH
,以便ruby在尝试销售宝石之前尝试从系统gem加载文件。