我想测试一个集合是否是瞬态的。我尝试了以下功能:
(defn transient? [coll]
(extends? clojure.lang.ITransientCollection (type coll)))
但它不起作用:
user=> (transient? {})
NullPointerException clojure.core/implements? (core_deftype.clj:512)
user=> (transient? (transient {}))
NullPointerException clojure.core/implements? (core_deftype.clj:512)
extends?
的文档未提及它无论如何都适用于Java接口。我只是希望他们能够工作。有没有其他方法可以确定集合是否是瞬态的?
我正在使用Clojure 1.5.1。
答案 0 :(得分:4)
您需要使用instance?
而不是extends?
。
extends?
询问类型是否扩展了协议。 ITransientCollection是一个Java接口,而不是协议,所以instance?
就是这个工具。
user=> (instance? clojure.lang.ITransientCollection (transient {}))
true
user=> (instance? clojure.lang.ITransientCollection {})
false