10

REPL のテキスト出力をクリーンアップするという意味ではありません。REPLで評価されたすべての結果をクリーンアップすることを意味します。開発中、繰り返しますC-c C-qC-c M-j効率が悪いです。


アップデート

私のデバッグ動作が悪い可能性があります。他の人が CIDER を使ってどのようにプログラムを開発しているのかはわかりませんが、上記の機能が本当に必要です。他の開発者も私と同じ問題に遭遇していると思います。

たとえば、clojure prog ユニットの先頭で、別の function によって使用され、後に実装されるdeclarefunction を宣言するために使用します。その後、私は、など、プログはうまくいきます。後で、時々の前方宣言を削除しました。何が起こりますか?プログレは今でも順調に進んでいます。本当に?次に、ジョブ全体をコミットし、CIDER REPL セッションを終了します。foobarfoobarC-c C-kfoo

朝の災害:シンボルfooが見つかりません!

それが私の話です。では、誰も同様の問題に遭遇したことはありませんか?

4

5 に答える 5

11

名前空間で(refresh)関数を試してください:clojure.tools.namespace.repl

更新機能は、Clojure ソース ファイルのクラスパス上のすべてのディレクトリをスキャンし、それらの ns 宣言を読み取り、それらの依存関係のグラフを作成し、それらを依存関係順にロードします。

https://github.com/clojure/tools.namespace#reloading-code-usage

userREPL に入力した名前空間で宣言された vars は削除されないようですが、削除されます。

...変更された名前空間をアンロード (削除) して、古い定義を消去します。

通常、これに加えていくつかの便利なものをuser名前空間に追加するため、起動時に REPL にロードされます。

(ns user
  (:require [clojure.tools.namespace.repl :refer [refresh]]
            [clojure.repl :refer [doc source]]
            [clojure.pprint :refer [pprint pp]]
            [midje.repl :as midje]
            [clojure.stacktrace :as st]))

そのコードをメイン ソースとテスト ソースから分離しておくには<project root>/dev/user.clj、それを のファイルに置き、leinproject.cljファイルに次を追加します。

:profiles {:dev {:source-paths ["dev"]}}

(ps 答えてほしい質問ではありませんが、この回答を見て Cider REPL のテキストをクリアしたい場合は、C-c M-o( https://github.com/clojure-emacs/cider )

于 2015-02-07T08:14:39.070 に答える
10

Clojure を cider-mode で使用する場合、EMACS では以下を使用します。

repl バッファー内のCc Mo

cider-repl-clear-buffer にバインドされています

于 2016-11-07T13:15:34.657 に答える
6

Like others have already pointed out, the 'proper' solution is to use Stuart Sierra's component library.

But since you're running in CIDER, you can use C-c C-x to run cider-refresh, which will reload your project and thereby recreate your initial state.

于 2015-02-08T07:57:11.257 に答える
1

他の人が述べたように、状態情報を保持している変数がある場合にのみ、repl をクリアする必要があります。状態を持たないコンポーネントの場合は、ソース バッファーをリロードする (再評価する) だけで十分です。

状態を追跡するコンポーネントを含むワークフローを管理する非常に興味深い方法の 1 つは、Stuart Seirra のコンポーネント フレームワークです。http://youtu.be/13cmHf_kt-Qを参照

もう 1 つの方法は、def ではなく defonce を使用してコードを記述することです。これにより、状態変数を再定義せずにソース コードをリロードできます。

一方、必要のない defn または defmacro 定義をクリーンアップするためにこれを実行したい場合、つまり repl から「汚染」をクリーンアップする場合は、正直に言うと、私は気にしません。defn やマクロを呼び出しているものがない場合、それは問題ではありません。

于 2015-02-07T23:40:40.963 に答える