我有一个用于 cljx 中的图形程序的代码库,它被编译为 Clojure 和 ClojureScript。
我现在想介绍我的第一个宏。
(defmacro optional-styled-primitive [args body]
(let [extra (conj args 'style)]
`(fn (~extra (->SShape ~'style ~body))
(~args (->SShape {} ~body))
)
)
)
此宏的目的是获取参数列表,以及使用这些参数生成几何的表达式。并返回一个具有两个 arities 的函数:其中一个采用可选的样式参数。然后,该宏将在定义它的文件中使用,以生成许多其他可选择采用样式的函数。例如 :
(def square (optional-styled-primitive [n] [[0 0] [0 n] [n n] [n 0]]))
但是很明显,引入这个宏会破坏 ClojureScript 编译阶段。
我不知道该怎么办。在线讨论谈论需要使用 ClojureScript,:require-macros
但我从未在任何地方实际导出或需要此宏。我只想在定义的地方使用它。那么如何在文件中间告诉编译器使用 Clojure 来扩展这个宏,然后才能到达 ClojureScript 编译器呢?