2012-08-29 12 views

Odpowiedz

15

W ogólnym przypadku można użyć instance? predykat:

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

Cytowanie dokumentację:

(instance? c x) ocenia x i testy jeśli jest instancją klasy C. Zwraca true lub false.

Na przykład:

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

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

Dla kodu w pytaniu, czy coś w tym rodzaju:

(instance? package.of.IFn a) 

Albo, jak zostało wskazane w komentarzach, bo bardzo specyficzny przypadek pytania, czy a jest instancją IFn, to zadziała:

(ifn? a) 
+12

Jeszcze lepiej, użyj '(ifn? A)'. –

+0

@DaveRay Jak to jest? Nie wiedziałem, że interfejs automatycznie pochodzi z predykatem testowania, gdzie jest to wyjaśnione w dokumentacji? czy działa dla interfejsów Java, takich jak 'Serializable'? –

+2

Nie, nie ma generycznych predykatów dla każdego typu, ale pytanie, jak przetestować dla 'IFn', w takim przypadku,' ifn? 'Byłoby chyba bardziej idiomatyczne niż użycie' instancji? '. Podobnie, użyłbym 'string?' Zamiast twojego pierwszego przykładu. –

Powiązane problemy