我嘗試下面的代碼(瞭解宏):Clojure的模板可變參數宏
(require '[clojure.template :as temp])
(defn fna [x] (println "a" x) x)
(defn fnb [x] (println "b" x) x)
(temp/apply-template '[& fns]
'(fn [payload] (-> payload fns))
'[fna fnb])
;; returns (fn [payload] (-> payload fnb))
我被輸出驚訝,因爲我期待:
(fn [payload] (-> payload fna fnb))
爲什麼產生這個輸出,以及實現上述目標的方法是什麼?我在文檔中特別提到:
argv是一個參數列表,如在defn中。
注:它可以寫成像這樣,但我想了解如何使用模板:
(defmacro wrap-fn-> [& fns]
`(fn [~'x#]
(-> ~'x
[email protected])))
我會說,如果您正在學習使用'template',因爲您希望它會有用,請不要打擾。除了clojure.test之外,它並不在現實生活中使用,它是一個相當有限的工具;知道如何自己編寫宏將爲您提供更好的服務。 – amalloy