クラスパスに新しいものを追加して (例: project.clj を編集して実行lein deps
)、それを既存の Clojure セッションにインポートすることはできますか?
これは、切断してから再度接続する必要がないためです。
クラスパスに新しいものを追加して (例: project.clj を編集して実行lein deps
)、それを既存の Clojure セッションにインポートすることはできますか?
これは、切断してから再度接続する必要がないためです。
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"}))
とはいえ、使用する前に、最初のクラスパスにザクロ自体を含める必要があります。
私はclojure sessionによって、 によって開始された REPL を意味すると仮定していますlein repl
。
あなたの質問への簡単な答えはノーです。あなたにはできません。
JVM はクラスローダーをサポートしてこの動的ローディング機能を提供し、clojure はこれらを利用して動的クラス定義などdeftype
gen-class
をサポートします。
新しいサード パーティ クラス (おそらく新しいライブラリ jar) をクラスパスに追加することは、既に使用されているクラスローダーをアンワインドして再構築する必要があると考えると、非常に複雑です。
clojure のクラスローディングの詳細については、この質問を参照してください