如何在 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 将 n
和 m
突出显示为未声明的变量,这不会发生在 for
和 let
等宏中。我怎样才能改进我的实施?
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 → 突出显示未解析的符号)。
我正在尝试编写一个宏,它接受一个绑定向量和一个可以访问这些绑定的函数。最简单的形式:
(defmacro f-with-binds [binds f]
`(let [~@binds]
~f))
即使上述有效:
(f-with-binds [n 123 m 456] (println n m)) ;; => 123 456
我对此不满意,因为 Cursive 将 n
和 m
突出显示为未声明的变量,这不会发生在 for
和 let
等宏中。我怎样才能改进我的实施?
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 → 突出显示未解析的符号)。