{{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}"
顺便提一下:在基础是匿名和计算(而不是编码)的或键顺序是基础的重要方面时,structmap(now as ever)是合适的。 人们有时引用参考文档中的声明,“ StructMaps 的许多用途现在可能由记录更好地服务”,但当然,它只是指那些实际上由记录更好地服务的用途。 记录类不能是匿名的,defrecord 需要在编译时获取基础;正常映射不显示预设的键顺序。 因此 structmaps 的继续相关性。