2016-06-10 5 views
1

Ich benutze eine externe Bibliothek, und übergeben Sie eine Funktion, die ich schreibe. So etwas wie dies, zum Beispiel:Clojure - idiomatisch, um eine Schließung zurückzugeben oder die Funktion teilweise anzuwenden?

(ext-func my-func) ...

my-func Bedürfnisse werden einige Daten gegeben zu tun Berechnung. Die Art, wie ich es sehe, habe ich zwei grundlegende Möglichkeiten:

1) Schreiben my-func in einer Weise, dass es meine Daten akzeptiert, und gibt eine Funktion, die dann die Daten über die Schließung gebunden haben, wenn die externe Bibliothek ruft es an. Zum Beispiel:

(defn my-func 
    [mydata] 
    (fn [] 
    (... access to mydata via closure ...))) 

(ext-func (my-func somedata)) 

2) Sie nicht wieder eine Funktion aus my-func, sondern binden Daten an es, wenn ich es zu ext-func passieren:

(defn my-func 
    [mydata] 
    (... evaluate, use mydata, etc.)) 

(ext-func (partial my-func somedata)) 

Ich nehme an, die man verwenden könnte beantwortet, wie Ich beabsichtige, die Funktion anderweitig zu verwenden. Wenn ich es an anderen Orten verwende, möchte ich zum Beispiel keine Funktion zurückgeben. Aber, alle anderen Dinge sind gleich ...

... Welche von diesen ist der idiomatische Ansatz?

Antwort

2

partial ist nur Zucker, um die anonyme Funktion zu erstellen. Schauen Sie sich an, es ist source. Also, effektiv sind sie gleichwertig. Treffen Sie Ihre Wahl. Keine ist idiomatischer, nur eine Frage der persönlichen Präferenz.

+1

Eine nette Sache über die Verwendung von Fn ist, dass Sie ein Symbol als erstes Argument zur Verfügung stellen können, das dann in allen Stack-Traces anstelle von partiell erscheint. – spieden

Verwandte Themen