Ich möchte ein ACL-Modul schreiben, indem Sie ein Makro schreiben, dieses Makro ist das Ergebnis jedes Funktionsaufrufs im Makro zu überprüfen, wenn eine false zurückgibt, dann wird die ACL fehlschlagen, ohne zu laufen der folgende Funktionsaufruf. Wenn eine wahr zurückgibt und es noch Funktionsaufrufe zu überprüfen gibt, überprüfen Sie die folgenden bis zum letzten.clojure Makro unquote Spleißen Liste der Funktionsaufrufe
(defmacro checks
[head & tail]
`(let [status# ~head]
(if (and (true? status#)
(seq '~tail))
(checks [email protected])
status#)))
Ich werde dieses Makro wie folgt aufrufen:
(checks (module1 args) (module2 args))`
aber dies wird für (check [email protected])
in der Makrodefinition scheitern. Das Problem ist, dass ich Unquote Splicing die Liste aber ohne jede Funktion in der Liste aufrufen möchte.
Nur ein Tipp, verwenden Sie keine Backticks zum Formatieren großer Codeabschnitte. Um es durch vier Leerzeichen zu markieren, drücken Sie Strg + k. – Carcigenicate
Wird nicht 'und' Makro dasselbe tun? –
Danke euch für die Kommentare. –