2012-08-29 6 views

Respuesta

15

Para el caso general, se puede utilizar el predicado instance?:

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

Citando la documentación:

(instance? c x) evalúa X y pruebas si es una instancia de la clase c. Devuelve verdadero o falso.

Por ejemplo:

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

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

Para el código en la pregunta, hacer algo como esto:

(instance? package.of.IFn a) 

O, como se ha señalado en los comentarios, por las muy específicas caso de preguntar si a es una instancia de IFn esto funcionará:

(ifn? a) 
+12

Mejor aún, use '(ifn? A)'. –

+0

@DaveRay ¿Cómo? No sabía que una interfaz viene automáticamente con un predicado de prueba, ¿dónde se explica esto en la documentación? funciona para interfaces Java, como 'Serializable'? –

+2

No, no hay un predicado genérico para cada tipo, pero la pregunta es cómo probar 'IFn', en cuyo caso,' ifn? 'Supongo que sería más idiomático que usar' instance? '. Del mismo modo, utilizaría 'string?' En lugar de su primer ejemplo. –

Cuestiones relacionadas