clojure - 从 Clojure 中的文件打印和阅读列表

标签 clojure

我有一个以下形式的 Clojure 数据结构:

{:foo '("bar" "blat")}

并尝试使用各种 pr/prn/print 将它们写入文件。然而,每次结构都写成

{:foo ("bar" "blat")}

然后当我尝试使用加载文件读取它时,我收到一个错误,例如:

java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IF n (build-state.clj:79)

大概是因为列表在读取时被评估为函数调用。有没有办法用引用形式的列表写出结构?

谢谢, 尼克

最佳答案

打印的逆过程通常是读取,而不是加载。

user> (read-string "{:foo (\"bar\" \"blat\")}")
{:foo ("bar" "blat")}

如果您确实需要打印可加载代码,则需要引用它两次。

user> (pr-str '{:foo '("bar" "blat")})
"{:foo (quote (\"bar\" \"blat\"))}"

user> (load-string (pr-str '{:foo '("bar" "blat")}))
{:foo ("bar" "blat")}

关于clojure - 从 Clojure 中的文件打印和阅读列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1874868/

相关文章:

macros - 编译后,假设程序可以在不调用 eval 的情况下运行吗?

java - 新的 compojure 模板无法启动 "No reader function for tag namespace"

flutter - ClojureDart : Error while host-compiling (ns samples. 表(:require ["package:flutter/material.dart" :as m] [cljd. flutter.alpha 作为 f]))

clojure - 从向量中选取 "Random"元素

r - Clojure/Incanter 中的快速向量数学

ClojureScript Repl 安全性

Haskell:自动脱糖语法

scala - 为什么 clojure 在 alioth 基准测试中的表现比 scala 差

java - Clojure:类 CSS/DOM 的 Java UI

clojure - 为什么 Clojure 的 gensym 在每次调用时增加 3?