【发布时间】:2017-07-04 01:01:10
【问题描述】:
在定义默认参数时,我遇到了一对 Clojure 宏的问题。
在以下有 2 个宏的情况下,mm02 调用 mm01:
(defmacro mm01
[ & [ { :keys [ f1 ] :or { f1 long } :as opts } ]]
`(let []
(println "(2) ~f1" ~f1)))
(defmacro mm02
[ & [ { :keys [ f1 ] :as opts } ]]
`(let []
(println "(1) ~f1" ~f1)
(mm01 ~@opts)))
评价:
(mm02 { :f1 byte })
打印出来:
(1) ~f1 #function[clojure.core/byte]
(2) ~f1 #function[clojure.core/long]
但是,我本来期望:
(1) ~f1 #function[clojure.core/byte]
(2) ~f1 #function[clojure.core/byte]
是我做错了什么还是我遗漏了什么?
顺便评价一下:
(mm01 { :f1 byte })
打印出来:
(2) ~f1 #function[clojure.core/byte]
非常感谢。
【问题讨论】: