Clojure と Emacs を学び始めたばかりです。Windows用のClojure Boxを実行しています。コードをバッファに記述して、呼び出すことなくREPLで実行できるようにしたいと考えています
(use 'example.code)
いつも。Cc Ck については知っていますが、名前空間をリロードしません。私が使用する場合
(in-ns 'example.code)
repl で名前空間を変更するには、機能します。これを行う正しい方法は何ですか?
Clojure と Emacs を学び始めたばかりです。Windows用のClojure Boxを実行しています。コードをバッファに記述して、呼び出すことなくREPLで実行できるようにしたいと考えています
(use 'example.code)
いつも。Cc Ck については知っていますが、名前空間をリロードしません。私が使用する場合
(in-ns 'example.code)
repl で名前空間を変更するには、機能します。これを行う正しい方法は何ですか?
in-ns
正しい方法の一つです。
私にとって最も「正しい」と感じる方法は、REPL の名前空間で(require '[example.code :as ec])
作業することです。user
そうすれば、使い捨ての実験状態が維持されuser
、ec/foo
私にとって十分に便利です(そして、どこfoo
から来るのかが明らかになります)。再コンパイルを強制するためにいつでも(require :reload-all 'example.code)
(同じように動作します) と言うことができます。use
また、次の関数を使用して、特定の名前空間から取り込まれたすべてのマッピングを (現在の名前空間から) 削除する関数を次に示しますuse
。
(defn unuse [ns]
(doseq [[n v] (ns-refers *ns*)]
(if (= (.. v ns name) ns)
(ns-unmap *ns* n))))
その上に構築できます
(defn reuse [ns]
(unuse ns)
(remove-ns ns)
(use :reload-all ns))
(reuse 'example.code)
そして、名前空間を新たなスタートに近づけるように言います。deftype
( &などの 1.2 の新機能はdefrecord
いくつかの複雑さを導入することに注意してください...特に、ed クラスunuse
には影響しません-- これにはレコードと-created 型が含まれます。それでもet al. フォームが再コンパイルされますが、奇妙に打ったのを覚えていますこれが十分ではないように思われるケース...おそらく私のエラー、おそらく私がまだ完全に調査していないこれらの機能の難解な側面.)import
deftype
:reload-all
deftype
たぶん、「汚い」方法は、(ns'example.code)を使用してrepl内のバッファーの名前空間に切り替えることです。ダーティは、バッファ定義をrepl定義と混合する原因です。Marczykの答えは正しいと思います。