嗨,各位!
我遇到了一些麻烦,让 cljs 缩进打印(cljs.pprint/pprint)表现得与常规 cljs 或 clj 打印函数一样,当它深入到默认用于表示自定义记录的标记元素时。
请看下面的示例 - *pr, pr-str, print* 和 *print-str* 函数都使用针对创建(EDN-like)标记元素针对MyRecord的默认方法,并产生相同的结果。
*#cljs.user.MyRecord{:value "a"}*
另一方面,*pprint*只是忽略记录的标记,并将其简单地按映射遍历/打印。
*{:value "a"}*
我在cljs.pprint命名空间中是否遗漏了某个设置和/或参数?我简要地查看了代码,但它似乎默认使用print-str - 所以这可能只是深度优先遍历图而不会检查每个节点的类型?目前这看起来像是我的一个错误,因为pprint函数的预期行为应该是与print和其他核心函数表现得一致。
这个工作有效
cljs.user=> (defrecord MyRecord [value])
cljs.user/MyRecord
cljs.user=> (pr (MyRecord. "a"))
#cljs.user.MyRecord{:value "a"}
nil
cljs.user=> (pr-str (MyRecord. "a"))
"#cljs.user.MyRecord{:value \"a\"}"
cljs.user=> (print (MyRecord. "a"))
#cljs.user.MyRecord{:value a}
nil
cljs.user=> (print-str (MyRecord. "a"))
"#cljs.user.MyRecord{:value a}"
但是这不起作用
cljs.user=> (cljs.pprint/pprint (MyRecord. "a"))
{:value "a"}
"{:value \"a\"}\\n"
cljs.user=> (with-out-str (cljs.pprint/pprint (MyRecord. "a")))
"{:value \"a\"}\\n"
根据GitHub,cljs.pprint命名空间的最新修订版自1.7.28以来没有变化,所以我假设所有版本都受影响,直至当前版本。
谢谢帮助!