我正在写一个Brainf*** Clojure 中的解释器。我想通过使用标准输入的程序。但是,我稍后仍然需要从标准输入中读取用户输入。
目前,我正在这样做:
$ cat sample_programs/hello_world.bf | lein trampoline run
我的 Clojure 代码仅使用 read-line
读取第一行:
(defn -main
"Read a BF program from stdin and evaluate it."
[]
;; FIXME: only reads the first line from stdin
(eval-program (read-line)))
如何读取我通过管道传入的文件中的所有行? *in*
似乎是 java.io.Reader
的一个实例,但它只提供 .read
(一个字符), .readLine
(一行)和read(char[] cbuf, int off, int len)
(看起来级别很低)。
最佳答案
将所有输入数据作为单个字符串读取非常简单:
(defn -main []
(let [in (slurp *in*)]
(println in)))
如果您的文件可以容纳在可用内存中,则此方法可以正常工作;对于延迟读取大文件,请参阅 this answer .
关于clojure - 如何在 Clojure 中读取 stdin 中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20825498/