3 Stimmen

Funktionen mit benannten Parametern in Clojure

Dieser Code bespricht benannte Argumente in Clojure aus "The Joy of Clojure":

(defn slope [& {:keys [p1 p2] :or {p1 [0 0] p2 [1 1]}}] 
   (float (/ (- (p2 1) (p1 1))
             (- (p2 0) (p1 0)))))

(slope :p1 [4 15] :p2 [3 21])

Die Funktion selbst verstehe ich - kein Problem mit der Zerstörung - aber ich verstehe den Aufruf nicht.
Werden vier Argumente an slope übergeben? Wie werden die Vektoren :p1 und :p2 zugewiesen?

8voto

dfan Punkte 5542

Sie übergeben vier Argumente an slope, ja. Die [] Teil von slope legt die Parameter fest, in denen & bedeutet "alle zusätzlichen Parameter in diese Form schlürfen", was dann angibt, dass nach Argumenten gesucht wird, die eine Karte mit den Schlüsseln p1 y p2 (und gibt Standardwerte an, wenn einer von beiden nicht vorhanden ist).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X