定义Clojure宏的同义词

Al *_*hou 12 macros clojure

因此,继Clojure宏创建函数的同义词之后,我发现def不能用于定义宏的同义词.以下是我尝试过的Clojure不允许的例子.

;(def def-function defn)
;(def case cond)
;(def function fn)
Run Code Online (Sandbox Code Playgroud)

是否可以在Clojure中为宏定义同义词/别名?它需要使用defmacro吗?

cgr*_*and 29

可能听起来(线)嘈杂但是

(def #^{:macro true} case #'cond)
Run Code Online (Sandbox Code Playgroud)

作品!


Ale*_*x B 8

你可以使用宏:

user=> (defmacro def-function [& args] `(defn ~@args))
#'user/def-function
user=> (def-function g [] 2)
#'user/g
user=> (g)
2
Run Code Online (Sandbox Code Playgroud)

或者您可以使用clojure.contrib.def/defalias:

user=> (use 'clojure.contrib.def)
nil
user=> (defalias def-function defn)
#'user/def-function
user=> (def-function g [] 2)
#'user/g
user=> (g)
2
Run Code Online (Sandbox Code Playgroud)

  • 不再有像'clojure.contrib.def`这样的东西了.https://groups.google.com/forum/#!topic/clojure/LhidPSlvX_Q (3认同)