使用绝对路径的Ruby自动加载

时间:2014-02-15 16:58:37

标签: ruby autoload

出于某种原因,我在某个项目上工作的人创建了一个像这样进行自动加载的宝石:

  [
    [: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'

无论如何,如果有的话,哪种方式更好?

1 个答案:

答案 0 :(得分:0)

就像在shell脚本中一样,最后两个代码块会使您处于PATH环境变量中的任何反复无常的值。它可能会也可能不会加载正确的文件......

图片,例如,一个销售的宝石和PATH,以便ruby在尝试销售宝石之前尝试从系统gem加载文件。