【问题标题】:Is there a better way to ensure ruby's LOAD_PATH doesn't get messed up?有没有更好的方法来确保 ruby​​ 的 LOAD_PATH 不会搞砸?
【发布时间】:2013-02-10 05:56:40
【问题描述】:

我试图避免向 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

然后,您将调用
add_loadpath SOME_PATH

,而不是像往常一样使用$LOAD_PATH.unshift SOME_PATH

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

【问题讨论】:

    标签: ruby load-path


    【解决方案1】:

    我相信$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
    

    【讨论】:

    • 你是对的,大多数时候$LOAD_PATH 没有被相对路径污染,但是没有什么能阻止某人输入这样的东西,LOAD_PATH.unshift '../../bin' 并打破了这个约定。我正在尝试消除这种可能性并处理相对路径的可能性。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2013-04-06
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    相关资源
    最近更新 更多