0

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

これは、同じフォルダーを指しているが同じ文字列ではない 2 つのパスがロード パスに含まれている場合の問題を回避するためです。たとえばfoo/../barbar

4

1 に答える 1

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
于 2013-02-10T06:51:46.647 に答える