据我所知,Clojure 的 pr
函数以打印对象,当重新读取时将等于原始对象。我的主要信息来源是 Clojure 内核开发者 Stuart Sierra 的这个讲话 https://youtu.be/pbodL96HM28?t=216(我没有找到任何文档来说明 pr 提供的保证)。
如果这是正确的,那么 pr
对 java.sql.Timestamp 和 java.util.Calendar 不起作用。例如,这返回 false。
(let [d (java.sql.Timestamp. 1)]
(= d
(read-string
(pr-str d))))
此外,Clojure 的文档说,当 print-dup 为 true 时,这意味着 对象将以打印方式打印,以便在稍后读取时保留其类型
对于 java.sql.Timestamp 和 java.util.Calendar,情况并非如此
`
(binding [*print-dup* true]
(prn (java.sql.Timestamp. 1)))
=> #inst "1970-01-01T00:00:00.001000000-00:00"
除了回答以上问题,了解这些问题可能为 Clojure 支持由 https://clojure.atlassian.net/browse/CLJ-2224 跟踪的 java.time 日期类型提供一些基础。
我明白上述行为可以被用户更改,但我询问的是默认实现。