Clojure - 派遣宏特别吗?

gat*_*ado 5 macros clojure

我想将调度宏包装在另一个中以保持清洁.然而,Clojure似乎对待它的方式不同......或许我误解了什么?让我们看一下简单地为别名制作别名的情况#.

这有效:

(defmacro mkDef [x y] `~(list 'def x y))
Run Code Online (Sandbox Code Playgroud)

但这不是:

(defmacro mkDispatch [x] `~(list '# x))
Run Code Online (Sandbox Code Playgroud)

谢谢!!

PS有足够代表的人:请创建一个syntax-macros标签; 我希望能够更好地搜索类似的问题.

Joo*_*aat 8

#datch宏是一个读取器宏,读取器宏不能使用常规宏实现; 它们由(读)代替(eval)来解释.