2015-08-15 4 views

risposta

3

L'incredibile core.typed introduce "un sistema di tipo opzionale per Clojure", come potete vedere sul loro official website.

In particolare si consiglia di utilizzare il proprio defprotocol macro (from core.typed wiki):

Definizioni di protocolli dovrebbero usare clojure.core.typed/defprotocol cui sintassi ricorda defprotocol e fn digitato:

(defprotocol IUnifyWithLVar 
    (unify-with-lvar [v u :- LVar s :- ISubstitutions] :- (U ISubstitutions Fail))) 

protocolli polimorfi sono supportati:

(defprotocol [a b] Lens 
    (-fetch [l x :- a] :- b) 
    (-putback [l x :- a v :- b] :- a)) 

Una volta installed, si esegue tramite leiningen con . Lo svantaggio evidente è che devi annotare il tuo codice. Questo è il costo da pagare per aumentare la sicurezza del codice utilizzando il controllo di tipo statico.

Potrebbero interessarti anche le funzioni satisfies? e instance?.

+0

"soddisfa?" O "istanza?" Verificare che qualche interfaccia o protocollo sia implementata a fondo? Solo in combinazione con core.typed? – noisesmith

+0

Sono cose completamente separate. 'core.typed' è un controllo di tipo, mentre gli altri due sono funzioni e devono essere richiamati in fase di esecuzione (' satisfies? 'è utile per i protocolli, non' instant? 'ma l'ho incluso per completezza). Di nuovo sono completamente indipendenti. – nha

+0

OK, la ragione per cui lo chiedo è che nessuna di queste funzioni, per quanto ne so, dice se alcuni oggetti implementano un'interfaccia specifica o un metodo di protocollo. – noisesmith

Problemi correlati