Как хранить методы Java в списке в Clojure

StackOverflow https://stackoverflow.com/questions/1209801

  •  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) содержит подробности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top