gpt4 book ai didi

clojure - 如何在 clojure 中从 stdin (*in*) 读取行

转载 作者:行者123 更新时间:2023-12-03 07:25:04 24 4
gpt4 key购买 nike

我正在编写我的第一个 clojure 程序,并且想要从 stdin 读取行。

当我尝试这个时:

(doall (map #(println %) (line-seq *in*)))

我得到这个异常:

Exception in thread "main" java.lang.ClassCastException: clojure.lang.LineNumberingPushbackReader cannot be cast to java.io.BufferedReader (test.clj:0)

我在版本 1.0 和 1.1 中得到相同的结果

那么如何将 *in* 转换为可以迭代的 seq ?我本以为这很常见,以至于 *in* 本身是可迭代的,但这也不起作用 - 如果我尝试直接使用它,我会得到:

java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.LineNumberingPushbackReader (NO_SOURCE_FILE:0)

此外,是否有在 clojure 中进行常规文件处理的示例?

最佳答案

尝试包装*in*在 java.io.BufferedReader 中。并且使用 doseq 而不是 doall,正如 devstopfix 指出的那样:

(doseq [ln (line-seq (java.io.BufferedReader. *in*))]
(println ln))

请注意line-seq据记录需要 BufferedReader作为其来源。

关于clojure - 如何在 clojure 中从 stdin (*in*) 读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com