有没有更好的方法来确保ruby的LOAD_PATH不会搞砸?

时间:2013-02-10 05:56:41

标签: ruby load-path

我试图避免向ruby的LOAD_PATH添加冗余路径。这不是一项非常复杂的任务,我只是想知道是否有更清洁的方法,然后我想出了什么。

这是我现在的解决方案:

def add_loadpath(new_path)
  included = $LOAD_PATH.inject(false) do |acc,path|
    acc || new_path == File.expand_path(path)
  end
  $LOAD_PATH.unshift new_path unless included
end

然后,而不是通常$LOAD_PATH.unshift SOME_PATH,你会打电话给 add_loadpath SOME_PATH

这是为了避免在加载路径包含指向同一文件夹但不是同一字符串的两条路径时出现问题。例如foo/../barbar

1 个答案:

答案 0 :(得分:0)

我相信$LOAD_PATH中的所有路径都已展开,因此File.expand_path(path)毫无意义。您的代码可以重构为:

def add_loadpath(new_path)
  File.expand_path(new_path)
  .tap{|new_path| $LOAD_PATH.unshift(new_path) unless $LOAD_PATH.include?(new_path)}
end

def add_loadpath(new_path)
  $LOAD_PATH.unshift(File.expand_path(new_path)).uniq!
end