评论由: devn 所发表
首先,原始描述带来了 (empty? (transient ()))
。根据 https://clojure.org/reference/transients 中的文档,对于列表,支持transient没有好处。
当前对于Java集合的行为
`
(empty? (java.util.HashMap. {}))
=> true
(empty? (java.util.HashMap. {1 2}))
=> false
(seq (java.util.HashMap. {1 2}))
=> (#object[java.util.HashMap$Node 0x4335c9c3 "1=2"])
(seq (java.util.HashMap. {}))
=> nil
`
Java数组也有相同的行为。
在 CLJS-2802 中,当前补丁的方法是通过显式检查是否是 TransientCollection,并在 empty?
中使用该方法来解决问题。
目前,transient集合不实现 Iterable,像持久集合那样做的。如果实现了 Iterable,我相信 RT.seqFrom 将会工作,从而也使得 empty?
能够工作。