【问题标题】:How define variables in a macro, so that they available for the caller of the macro如何在宏中定义变量,以便宏的调用者可以使用它们
【发布时间】:2010-12-16 08:05:03
【问题描述】:

我想要一个可以像这样使用的宏 dbtest:

(dbtest
  (prn test-object1)
  (prn test-object2))

test-object1 和 test-object2 应该是由 dbtest 定义的变量(因为我每次使用 dbtest 宏时都需要它们)。 “prn”只是一个例子;我想在宏中使用任意代码。

我试过了:

(defmacro dbtest [& body]
  `(sql/with-connection db
     (delete-all-tables)
     (let [~'test-object1 (insert-object "foo")]
       ~@body)))

其中 insert-object 是一个将某些内容插入数据库并返回相应数据结构的函数。

但它不起作用:我收到“没有这样的 var”错误

【问题讨论】:

  • 对了,我相信你定义的变量叫做anaphora,就像这句话中的“它”:我喜欢巧克力,虽然它让我发胖。

标签: macros clojure


【解决方案1】:

它对我有用:

user=> (defmacro let-test [& body]
         `(let [~'test-object1 123] ~@body))
#'user/let-test
user=> (let-test (+ test-object1 321))
444

您确定问题不在于与 SQL 相关的调用吗?

【讨论】:

  • 谢谢!你是对的,这是一个完全不同的问题;我只是被错误弄糊涂了。现在修复:-)
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2011-03-19
  • 2011-01-28
相关资源
最近更新 更多