2

私の clojure コードには、カスタム マクロの呼び出しで作成された関数がいくつかあります。通常、マクロは何らかのデータ構造を取り、そこからメソッドを作成します。

これは不自然な例です:

(create-function {:name "view-data" ...})

と呼ばれる新しい関数を作成しますview-data。(私のデータベース クエリはデータ駆動型なので、特定のクエリを呼び出すわかりやすい名前の関数を作成できます)

私の問題は、mvn clojure:swankターゲットを実行して emacs からスライム セッションに接続すると、これらの関数が表示されないことです。C-c C-k関数を作成するには、ファイルにアクセスして自分でコンパイルする必要があります。

maven の出力は、ファイル自体は正常にコンパイルされることを示唆していますが、スライム セッションは関数について認識していません。

なぜこれが起こっているのでしょうか?

4

2 に答える 2

1

私のプロジェクトにrequireは、repl で利用可能なあらゆる場所からすべての関数を作成するすべての名前空間のファイルがあります。おそらく、これを行うためのもっとエレガントな方法があるかもしれませんが、このハックは私にとって非常に信頼できます.

于 2011-03-18T16:44:59.457 に答える
1

clojure では、コンパイルとロードは別のステップであることに注意してください。好きなクラス ファイルをすべて生成できますが、それらが読み込まれていない場合でも、実行中のプロセスには影響しません。

Maven の clojure:swank についてはよくわかりませんが、leiningen のように、swank ターゲットはプロジェクトのクラスパスを設定し、swank コードをロードするだけで、プロジェクト内のコードはロードしないように思えます。したがって、その後も何らかの方法でコードをロードする必要があります (たとえば、Emacs/SLIME から、他のターゲット/プラグインを使用して、または REPL から)。

于 2011-03-18T19:19:15.397 に答える