2012-08-29 98 views

回答

15

對於一般情況下,你可以使用instance?斷言:

(instance? <class-or-interface> <object>) 

引用文檔:

(instance? c x)評估x和測試它是否是類 C的實例。返回true或false。

例如:

(instance? java.lang.String "test") 
> true 

(instance? java.io.Serializable "test") 
> true 

對於該問題的代碼,做這樣的事情:

(instance? package.of.IFn a) 

或者,正如已指出了意見,爲非常具體的詢問是否aIFn的一個實例,這將工作:

(ifn? a) 
+12

更好,使用'(ifn?a)'。 –

+0

@DaveRay如何?我不知道一個接口會自動帶有一個測試謂詞,文檔中對此進行了解釋?它是否適用於Java接口,比如'Serializable'? –

+2

不,每種類型都沒有泛型謂詞,但問題是如何測試'IFn',在這種情況下,我會認爲'ifn?'比使用'instance?'更習慣。同樣,我會使用'string?'而不是你的第一個例子。 –