我会说你不能一般.由于承诺创建为reify下面几个接口:IDeref,IBlockingDeref,IPending,IFn.但是你可以检查值是否实现了其中一个:clojure.lang.IPending.
(defn promise? [v]
(instance? clojure.lang.IPending p))
Run Code Online (Sandbox Code Playgroud)
或者甚至可能全部:
(defn promise? [v]
(every? #(instance? % v)
[clojure.lang.IPending
clojure.lang.IFn
clojure.lang.IBlockingDeref
clojure.lang.IDeref]))
Run Code Online (Sandbox Code Playgroud)