有:
(def x (promise))
如何检查x的类型是否是承诺?
由于
答案 0 :(得分:5)
我会说你一般不能。因为promise是作为多个界面的reify
创建的:IDeref
,IBlockingDeref
,IPending
,IFn
。但您可以检查值是否实现其中一个:clojure.lang.IPending
。
(defn promise? [v]
(instance? clojure.lang.IPending p))
或者甚至可能全部:
(defn promise? [v]
(every? #(instance? % v)
[clojure.lang.IPending
clojure.lang.IFn
clojure.lang.IBlockingDeref
clojure.lang.IDeref]))
答案 1 :(得分:2)
我会去
(defn promise? [p]
(isa? (class p) clojure.lang.IPending))