3

cljファイルから、関数「print」によってREPLに出力されたものを取得し、すべてをテキストファイルに入れるにはどうすればよいですか? 新しい空のテキスト ファイルを作成し、それを他の clj ファイルと共にプロジェクト ディレクトリに配置して作業する方法はありますか?

ありがとうございました。

4

2 に答える 2

4

再バインドすることでこれを実現できます*out*

(binding [*out* (clojure.java.io/writer "foo.txt")]
  (print "Hello World"))

(print "This does NOT go to the file") ;; outside the binding macro

foo.txtこれを実行すると、「Hello World」という名前のファイルが作成されます。

唯一の注意点は、この再バインディングはbindingマクロ内で評価されたフォームにのみ影響するということです。


*out*これにより、ファイル ライターに再バインドされ、bindingマクロを使用する必要がなくなります。

(set! *out* (clojure.java.io/writer "foo.txt"))

(print "foo") ;; written to foo.txt
(print "bar") ;; written to foo.txt

この変数を再設定することによる悪影響があるかどうかはわかりません。注意して使用してください!

于 2013-02-25T22:18:27.887 に答える
0

これはまさにあなたが探しているものではないことはわかっていますが、with-out-strマクロを使用できるレコードのためだけです。

stringこれにより、ファイルに保存できるとして出力が評価されます。

于 2013-02-25T22:23:07.800 に答える