2012-08-29 52 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?'而不是你的第一个例子。 –