Come archiviare i metodi Java in un elenco in Clojure
-
06-07-2019 - |
Domanda
Voglio mantenere un elenco di funzioni di normalizzazione per un testo. Come posso conservare .toLowercase? Stavo pensando a qualcosa del genere:
(def normalizing-functions (list remove-punctuations .toLowerCase))
Soluzione
Sembra che tu stia creando un elenco di funzioni da applicare a qualcosa su base regolare. il metodo java non è proprio una funzione di clojure in questo senso, sebbene sia davvero facile da avvolgere proprio come faresti se dovessi alimentare la funzione della mappa.
#(. tolowercase %)
Altri suggerimenti
Invece di tenerli in un elenco che dovrai decomprimere in un secondo momento, potrebbe essere più semplice avvolgere .toLowerCase
in una funzione clojure (modifica: usando la mia sintassi di Arthur o) e componilo con le funzioni che intendi utilizzare per normalizzare i tuoi dati usando comp
:
user=> (defn remove-punctuation [st] ...removing puncutation mechanics...)
user=> (defn lower-case [st]
(.toLowerCase st))
user=> ((comp remove-punctuation lower-case) "HELLO THERE!")
"hello there"
user=> (defn normalize-data [data]
((comp remove-punctuation lower-case) data))
La macro memfn
lo farà in un modo più leggibile.
(def f (memfn toLowerCase))
(f "Hello")
restituirebbe "ciao". (doc memfn)
ha i dettagli.