Как хранить методы Java в списке в Clojure
-
06-07-2019 - |
Вопрос
Я хочу сохранить список нормализующих функций для текста. Как мне сохранить .toLowercase? Я думал о чем-то вроде этого:
(def normalizing-functions (list remove-punctuations .toLowerCase))
Решение
Похоже, вы составляете список функций для регулярного применения к чему-либо. в этом смысле Java-метод не совсем замыкающий легко обернуть его так же, как если бы вы собирались передать его в функцию карты.
#(. tolowercase %)
Другие советы
Вместо того, чтобы хранить их в списке, который вам придется распаковать позже, может быть проще заключить .toLowerCase
в функцию clojure (правка: с использованием синтаксиса my или Arthur) и скомпонуйте его с функциями, которые вы планируете использовать для нормализации ваших данных, используя 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))
Макрос memfn
сделает это более понятным способом.
(def f (memfn toLowerCase))
(f "Hello")
вернет "привет". (doc memfn)
содержит подробности.