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 报告)
...