如何在Clojure中的列表中存储Java方法

如何在Clojure中的列表中存储Java方法,clojure,Clojure,我想为文本保留一个规范化函数列表。我如何存储。toLowercase? 我在想这样的事情: (def normalizing-functions (list remove-punctuations .toLowerCase)) 这看起来像是你在做一个定期应用于某个东西的函数列表。从这个意义上讲,java方法不是clojure函数,尽管它确实是 很容易将其包装起来,就像您将其馈送到map函数的位置一样 #(. tolowercase %) #(.tolowercase%) 与其将它们保存在一个列

我想为文本保留一个规范化函数列表。我如何存储。toLowercase? 我在想这样的事情:

(def normalizing-functions (list remove-punctuations .toLowerCase))

这看起来像是你在做一个定期应用于某个东西的函数列表。从这个意义上讲,java方法不是clojure函数,尽管它确实是 很容易将其包装起来,就像您将其馈送到map函数的位置一样

#(. tolowercase %) #(.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")

我会回“你好”<代码>(docmemfn)有详细信息。

有效!是否有这些操作的文档?谢谢。这是一个匿名函数,有时也称为lambda#(.toLowerCase%))是一个reader宏,是(fn[x](.toLowerCase x))的简写。谢谢,但我不能为所有函数都这样做。不管怎么说,这是一个很好的技巧。