我试图避免向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/../bar
和bar
答案 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