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

欢迎!请参阅 关于 页面以获取更多关于这部分工作的信息。

0
打印
{{pr}} 错误地表示了一个包含命名空间键的 structmap。{{pr}} 错误地显示实际键的值,并包括幽灵键。


user> (pr-str (struct (create-struct :q/a :q/b :q/c) 1 2 3))
"#:q{:q/a nil, :q/b nil, :q/c nil, :c 3, :b 2, :a 1}"



这在 Clojure 1.8 中工作得很好,并且禁用 print-namespace-maps 功能似乎可以解决这个问题。


user> (binding [*print-namespace-maps* false]
         (pr-str (struct (create-struct :q/a :q/b :q/c) 1 2 3)))
"{:q/a 1, :q/b 2, :q/c 3}"



顺便说一句:Structmaps(仍然是现在)在基础是匿名和计算(而不是编码)时或当键顺序是基础的重要方面时是适当的。人们有时引用参考文档中的声明,“大多数 StructMaps 的用途现在可能由记录更好地服务”,但当然,它只涉及那些实际上由记录更好地服务的用途。记录类不能是匿名的,defrecord 需要在编译时指定基础;而普通映射不是预定义的键顺序。因此,structmaps 的持续相关性。

1 个答案

0
参考: https://clojure.atlassian.net/browse/CLJ-2469(由 alex+import 报告)
...