2013-02-10 42 views
0

我试图避免添加冗余路径到红宝石的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

回答

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 
+0

你说得对,大部分的'$ LOAD_PATH'不与相对路径污点,但时间没有什么能够阻止某人从输入这样的东西,'LOAD_PATH.unshift'../../ bin''并打破这个惯例。我试图消除这种可能性,并处理相对路径的可能性。 – 2013-02-10 07:09:39

相关问题