当我想将存储在文件中的S表达式读入正在运行的Common Lisp程序时,我执行以下操作:
(defun load-file (filename)
"Loads data corresponding to a s-expression in file with name FILENAME."
(with-open-file (stream filename)
(read stream)))
例如,如果我有一个名为的文件 foo.txt
包含S表达式 (1 2 3)
,如果调用如上,上面的函数将返回该S表达式: (load-file "foo.txt")
。
我一直在搜索和搜索,并没有在Clojure中找到同样优雅的解决方案。有任何想法吗?
谢谢!
你可以做到,例如
(require '[clojure.contrib.io :as io])
(io/with-in-reader (io/file "foo.txt") (read))
; => (1 2 3)
请注意,您可能想要重新绑定 *read-eval*
至 false
第一。另请注意,上面的内容适用于当前的contrib HEAD(当它发布时几乎肯定会在1.2中工作);对于Clojure 1.1,相同的功能可用于 clojure.contrib.duck-streams
和 clojure.contrib.java-utils
命名空间。
你可以做到,例如
(require '[clojure.contrib.io :as io])
(io/with-in-reader (io/file "foo.txt") (read))
; => (1 2 3)
请注意,您可能想要重新绑定 *read-eval*
至 false
第一。另请注意,上面的内容适用于当前的contrib HEAD(当它发布时几乎肯定会在1.2中工作);对于Clojure 1.1,相同的功能可用于 clojure.contrib.duck-streams
和 clojure.contrib.java-utils
命名空间。
我在这里找到了解决方案: 如何将字符串评估为clojure表达式?
(read-string (slurp "foo.txt"))
抱歉打扰你,伙计们^ _ ^