2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请查看关于页面了解更多本网站的工作方式。

0
Clojure

{{(str 1M)}} 产生 {"1"}
{{(str {:a 1M})}} 产生 {"{:a 1M}"}

后缀丢失是因为 {{str}} 直接调用了 {{.toString}}:{{java.lang.BigDecimal}} 对 {{M}} 后缀一无所知。

在映射上使用 .toString 调用 {{RT.print}},后者递归地调用 {{RT.print}} 以打印键值。{{RT.print}} 对 {{java.lang.BigDecimal}} 有一个特例,因此它会打印后缀。

6 个答案

0
_由 alexmiller 评论

如果您想打印一个可以被随后读取的字符串,通常您会使用 pr-str。为什么在这里不这么做更好呢?

故意不期望 str 可以被读取。
0
_由 dpsutton 评论

这最初是在调查 `spit` 时发现的。这个特定的行为最终证明不是罪魁祸首,但这是在调查时的一个发现。


clojure -e '(spit "foo.edn" 3M)' && cat foo.edn
3

clojure -e '(spit "foo.edn" {:thing 3M})' && cat foo.edn
{:thing 3M}


我们想知道使用 spit 对 edn 是否是一场灾难,或者是真正的错误。
0

由 dottedmag 评论

{{spit}} 调用 {{str}},这就是我找到它的原因。

制作一个调用 {{pr-spit}} 的 {{pr-str}} 十分简单,但如果其结果不能被 {{slurp}} 回来,那么 {{spit}} 便似乎变得没有用了?

0
_由 alexmiller 评论

哦,这实际上更有趣。作为解决方案,您可以在 spit 之前使用 pr-str。

关于 edn 打印的问题已经多次出现(可能甚至有一个关于此问题的工单)。
0

评论者:alexmiller

CLJ-1201 是这样一个工单

0
参考资料:[https://clojure.atlassian.net/browse/CLJ-2485](https://clojure.atlassian.net/browse/CLJ-2485)(由 dottedmag 报告)
...