如何在 Clojure 宏中绑定变量?

How to bind variables in Clojure macros?

我正在尝试编写一个宏,它接受一个绑定向量和一个可以访问这些绑定的函数。最简单的形式:

(defmacro f-with-binds [binds f]
  `(let [~@binds]
     ~f))

即使上述有效:

(f-with-binds [n 123 m 456] (println n m)) ;; => 123 456

我对此不满意,因为 Cursive 将 nm 突出显示为未声明的变量,这不会发生在 forlet 等宏中。我怎样才能改进我的实施?

ps.: 真正的宏 returns 转换器 - 绑定是转换器的状态,函数是转换器的阶跃函数

摘自@superkonduktr 评论:

这是 Cursive 中的一个已知问题,目前 worked on. For now the only remedy seems to be in the beta version 1.3.0-eap1, where you can instruct Cursive to resolve bindings in your macro as if it was a let。另一种解决方案是完全禁用未解析符号的突出显示(设置 → 语言和框架 → Clojure → 突出显示未解析的符号)。