3

クラスパスに新しいものを追加して (例: project.clj を編集して実行lein deps)、それを既存の Clojure セッションにインポートすることはできますか?

これは、切断してから再度接続する必要がないためです。

4

2 に答える 2

5

pomegranateを使用して、新しいライブラリをダウンロードし、実行時にクラスパスに追加できます。project.cljから直接読み取ることはありませんが、互換性のある構文を使用します(Leiningen 2が独自の依存関係解決に使用するAetherライブラリを使用します)。

使用法は次のようになります(READMEの例を引用):

=> (add-dependencies
      :coordinates '[[incanter "1.2.3"]]
      :repositories (merge cemerick.pomegranate.aether/maven-central
                           {"clojars" "http://clojars.org/repo"}))

とはいえ、使用する前に、最初のクラスパスにザクロ自体を含める必要があります

于 2012-05-15T13:33:52.310 に答える
1

私はclojure sessionによって、 によって開始された REPL を意味すると仮定していますlein repl

あなたの質問への簡単な答えはノーです。あなたにはできません。

JVM はクラスローダーをサポートしてこの動的ローディング機能を提供し、clojure はこれらを利用して動的クラス定義などdeftype gen-classをサポートします。

新しいサード パーティ クラス (おそらく新しいライブラリ jar) をクラスパスに追加することは、既に使用されているクラスローダーをアンワインドして再構築する必要があると考えると、非常に複雑です。

clojure のクラスローディングの詳細については、この質問を参照してください

于 2012-05-15T13:30:16.910 に答える