gpt4 book ai didi

macros - 用于读取文件的 Clojure 宏

转载 作者:行者123 更新时间:2023-12-01 13:53:07 26 4
gpt4 key购买 nike

我想创建一个可以读取文件的 Clojure 宏,当文件读取成功时,应该关闭流。

(import '(java.io FileReader File))

(defmacro read([x y]
`(let ~x
(try ~y
(. x close)
(catch Exception e# e#)))))

这样调用,

(read [stream (java.io.FileReader (java.io.File "somefile.txt"))] (. stream read)))

导致这个错误

java.lang.Exception: No such var: user/x (NO_SOURCE_FILE:8) 

有没有人有什么建议,谢谢。

最佳答案

你不是在寻找 with-open 吗,除非出于某种原因你想明确地使用宏?

(defn read [file-name]
(with-open [reader (BufferedReader. (FileReader. file-name))]
(doseq [line (line-seq reader)] (println line))))

根据ClojureDocs page , 它确保阅读器在表单末尾关闭。

希望对您有所帮助!

关于macros - 用于读取文件的 Clojure 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757440/

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