请在 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_ 发布

哦,这相对更有趣。作为一个 workaround,你可以在spit之前使用pr-str。

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

评论者:alexmiller

CLJ-1201 是这样一个工单

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