有:
(def x (promise))
如何检查 x 的类型是一个承诺?
谢谢
我会说你一般不能。因为 promise 是由reify
几个接口创建的:IDeref
, IBlockingDeref
, IPending
, IFn
. 但是您可以检查 value 是否实现其中之一: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]))
我会去
(defn promise? [p]
(isa? (class p) clojure.lang.IPending))