¿Cómo almaceno los métodos Java en una lista en Clojure?
-
06-07-2019 - |
Pregunta
Quiero mantener una lista de funciones de normalización para un texto. ¿Cómo almaceno .toLowercase? Estaba pensando en algo como esto:
(def normalizing-functions (list remove-punctuations .toLowerCase))
Solución
Parece que estás haciendo una lista de funciones para aplicar a algo de forma regular. El método Java no es una función de clojure en este sentido, aunque es realmente fácil de envolver como lo haría si fuera a alimentarlo a la función de mapa.
#(. tolowercase %)
Otros consejos
En lugar de mantenerlos en una lista que tendrá que desempaquetar más adelante, puede ser más fácil envolver .toLowerCase
en una función de clojure (edición: usando mi sintaxis o la de Arthur) y compóngalo con las funciones que planea usar para normalizar sus datos 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
hará esto de una manera más legible.
(def f (memfn toLowerCase))
(f "Hello")
devolvería "hola". (doc memfn)
tiene los detalles.