因此,继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)
作品!
你可以使用宏:
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)
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |