clojure - 如何在 Clojure 中读取 stdin 中的所有行

标签 clojure stdin clojure-java-interop

我正在写一个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/

相关文章:

types - clojure 的 core.typed 中的 `:-` 是什么意思?

ruby - 当输入来自管道时,STDIN.read 是否会运行直到达到 EOF?

go - 杀死父进程后将标准输入传递给子进程

clojure - 如何在 Kotlin 中运行 Clojure?

Clojure 注释和整数

java - 使 Java 类在 Clojure 中作为序列工作

emacs - 在 emacs 中选择一个 clojure 表单

clojure - 为什么不Clojure库尝试将唯一的名称用于通用函数名称

clojure - 使用 Clojure 进行 Html 解析和 Web 驱动的技巧?

python - 用于本地客户端-服务器通信的套接字与标准流