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

欢迎!请访问 关于 页面了解更多关于该网站的信息。

0
Clojure

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

后缀丢失是因为 {{str}} 直接调用 {{.toString}}:{{java.lang.BigDecimal}} 无关 {{M}} 后缀。

在 map 上调用 {{.toString}} 会调用 {{RT.print}} 并递归调用 {{RT.print}} 对于键和值。{{RT.print}} 对于 {{java.lang.BigDecimal}} 有一个特例,因此打印了后缀。

6 个答案

0
_由: alexmiller_ 评论

如果想要打印出可以之后读的字符串,通常使用 pr-str。这里为什么不在使用 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-str}} 的 {{pr-spit}} 非常简单,但如果没有能够被 {{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 提交)
...