Supponiamo di avere un record "simile alla funzione", almeno nel senso che rappresenta un'operazione che potrebbe essere applicata ad alcuni argomenti.È buona norma per un record Clojure implementare IFn?
posso farlo funzionare come una funzione mediante l'attuazione di clojure.lang.IFn
, qualcosa di simile a:
(defrecord Func [f x]
clojure.lang.IFn
(invoke [this arg]
(f x arg))
(applyTo [this args]
(apply f x args)))
((->Func + 7) 1)
=> 8
(sì, lo so che ho appena reimplementato una versione inferiore di partial
.... è solo un esempio: -))
Sta facendo un attrezzo record clojure.lang.IFn
una buona pratica o no?
Eventuali insidie a questo approccio?
Un record sembra implementare 'clojure.lang.Associative' ma non' clojure.lang.IFn'. Quindi puoi fare '(: a some-record)' per cercare la parola chiave ma non '(some-record: x)' – mikera
Precisamente. Ho controllato ma non ho visto nulla di esplicito su questo da Rich. Forse è solo una svista. –
+1 dato perché la domanda di @ mikera si interroga sui record non sui tipi. Poiché i record hanno già una semantica simile alla mappa, sarebbe confuso, per i tipi questo problema non è presente. – ponzao