【问题标题】:Create and then write to a text file what is printed to the REPL创建并写入一个文本文件,打印到 REPL
【发布时间】:2013-02-11 05:10:59
【问题描述】:

如何从 clj 文件中获取函数“print”输出到 REPL 的内容并将其全部放入文本文件中? 有没有办法创建一个新的空文本文件并将其与其他 clj 文件一起放在项目目录中并进行处理?

谢谢。

【问题讨论】:

    标签: java clojure functional-programming


    【解决方案1】:

    您可以通过重新绑定*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
    

    我不确定重新设置此 var 是否会产生任何负面影响。 谨慎使用!

    【讨论】:

    • 能否请您解释一下 ns 应该有什么?以及要进行的操作? foo 文件为空。
    • 如果不包含换行符,您必须刷新才能将输出放入文件中。这就是为什么您的文件显示为空的原因。对于这些示例,最好使用println
    【解决方案2】:

    我知道这不是您正在寻找的,只是为了记录,您可以使用with-out-str 宏。

    这会将输出评估为 string,您可以将其存储在文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多