评论由: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 来解决该问题,并像原始描述中提到的作为解决方案使用 (zero? (count coll))
。
当前,transient 集合没有实现 Iterable,而持久的集合实现了。如果实现 Iterable,我相信 RT.seqFrom 将会工作,并且通过扩展,empty?
。