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。有些原因在这里并不适用吗?

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(由 dottedmag 提出)
...