2009-07-30 10 views

Antwort

3

Es sieht aus wie Ihr eine Liste von Funktionen machen, um etwas auf einer regelmäßigen Basis anzuwenden. Die Java-Methode ist nicht wirklich eine Clojure-Funktion in diesem Sinne, obwohl es wirklich einfach zu wickeln, wie Sie es tun würden, wenn Sie es an die Kartenfunktion füttern würde.

 
#(. tolowercase %) 
+0

Das hat funktioniert! Gibt es eine Dokumentation für diese Operationen? Vielen Dank. – unj2

+3

Dies ist eine anonyme Funktion, manchmal auch Lambda genannt. # (. ToLowerCase%)) ist ein Lesemakro, das eine Abkürzung für (fn [x] (.toLowerCase x)) ist. – alanlcode

1

Anstatt sie in einer Liste zu halten, die Sie irgendwie später auspacken müssen, kann es nur einfacher sein .toLowerCase in einer clojure Funktion wrap (edit: mit meiner oder Arthurs Syntax) und komponieren sie mit die Funktionen planen Sie verwenden, um Ihre Daten zu normalisieren mit 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)) 
+0

Danke, aber ich kann das nicht für alle meine Funktionen tun. Das ist sowieso ein netter Hack. – unj2

1

Das memfn Makro dies in einem besser lesbaren Weise tun.

(def f (memfn toLowerCase)) 
(f "Hello") 

zurückkehren würde "Hallo". (doc memfn) hat die Details.

Verwandte Themen