5

私はライニンゲンプロジェクトをセットアップしています。Clojure ソース ファイルの 1 つで、いくつかのレコードを定義しました。私のワークフローは通常、emacs を起動して「lein swank」REPL に接続することです。REPL に接続したら、適切な名前空間に切り替えてファイルを Cc Ck します。これで、REPL とファイル内のコードの操作を開始できます。しかし、そのファイルのレコードに変更を加えて Cc Ck しても、REPL は変更を反映しません。

したがって、現状では、レコードに変更を加える必要があるたびに、lein swank プロセスを停止して再起動し、emacs から再接続する必要があります。これは非常に急速に古くなります。私は何が欠けていますか?Cc Ck の代わりに Cc Cl を試しましたが、うまくいきません。プロジェクトルートの「クラス」ディレクトリを削除しようとしましたが、それもダメです。

洞察や推奨事項をいただければ幸いです。

また、余談ですが、私は常にレコードが定義されている名前空間で作業しています。

編集:私は実際に defrecord のプロトコルの実装を変更しています。それを変更して Cc Ck を使用してコンパイルし、REPL に新しいレコードを作成すると、REPL はまだ古いプロトコル実装を使用しています。

4

1 に答える 1

4

例を使用できますが、おそらくレコードの定義を変更し、変更前に作成されたいくつかのレコードのインスタンスを見ていますか?

repl からレコードのインスタンスを定義し、defrecord を変更し、repl をリロードし、別の名前で新しいレコードを作成すると、両方のコピーとそれらの違いを確認できます。

プロジェクトにファイルを呼び出すことで、この種の混乱を回避しようとします。(use :reload-all ... all the namespaces in my project ...)このファイルだけをリロードすると、リロードすべてが古い var バインディングなどをスローします。

于 2011-03-23T17:43:33.920 に答える