【问题标题】:How do I create a macro to define two functions in clojure如何创建一个宏来定义 clojure 中的两个函数
【发布时间】:2011-02-27 07:17:59
【问题描述】:

下面的代码不像我预期的那样运行。

; given a function name, its args and body, create 2 versions:
; i.e., (double-it foo []) should create 2 functions: foo and foo*
(defmacro double-it             
  [fname args & body]       
  `(defn ~fname ~args ~@body) 
  `(defn ~(symbol (str fname "*")) ~args ~@body))

上面的代码并没有像我期望的那样创建两个函数。它只创建最后一个。

user=> (double-it deez [a b] (str b a))
#'user/deez*

如何获得一个宏来定义两个函数?

【问题讨论】:

    标签: macros lisp clojure


    【解决方案1】:
    ; given a function name, its args and body, create 2 versions: ; ie (double-it foo [] ) should create 2 functions: foo and foo* (defmacro double-it [fname args & body] `(do (defn ~fname ~args ~@body) (defn ~(symbol (str fname "*")) ~args ~@body))) (double-it afunc [str] (println str)) (afunc* "asd") (afunc "asd")

    无需单独引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多