小编Plu*_*tra的帖子

当宏调用另一个宏时,Clojure宏和默认参数

当定义默认参数时,我遇到一对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)))
Run Code Online (Sandbox Code Playgroud)

评价:

(mm02 { :f1 byte })
Run Code Online (Sandbox Code Playgroud)

打印出来:

(1) ~f1 #function[clojure.core/byte]
(2) ~f1 #function[clojure.core/long]
Run Code Online (Sandbox Code Playgroud)

但是,我原以为:

(1) ~f1 #function[clojure.core/byte]
(2) ~f1 #function[clojure.core/byte]
Run Code Online (Sandbox Code Playgroud)

我做错了什么或者我错过了什么?

顺便说一句,评价:

(mm01 { :f1 byte })
Run Code Online (Sandbox Code Playgroud)

打印出来:

(2) ~f1 #function[clojure.core/byte] …
Run Code Online (Sandbox Code Playgroud)

macros clojure

2
推荐指数
1
解决办法
117
查看次数

标签 统计

clojure ×1

macros ×1