3

持つ:

(def x (promise))

x の型がプロミスであることを確認するにはどうすればよいですか?

ありがとう

4

2 に答える 2

5

一般的にはできないと言えます。promise はreifyいくつかのインターフェースとして作成されるため: IDerefIBlockingDeref、。ただし、 value がそれらのいずれかを実装しているかどうかを確認できます: .IPendingIFnclojure.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]))
于 2013-02-04T15:45:01.870 に答える
2

私は一緒に行きます

(defn promise? [p]
  (isa? (class p) clojure.lang.IPending))
于 2013-02-04T15:44:45.780 に答える