评论者:devn
首先,原始描述提到了 (empty? (transient ()))
。根据https://clojure.org/reference/transients上的文档,在列表上支持transients没有好处。
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中,当前补丁的方法是在empty?
中通过显式检查是否为TransientCollection来围绕问题进行cond
,并像原始描述中提到的那样使用(zero? (count coll))
作为 workaround。
当前,transient集合没有实现Iterable,如持久的集合那样。如果实现 Iterable,我认为RT.seqFrom将工作,进而empty?
。