【问题标题】:How to bind variables in Clojure macros?如何在 Clojure 宏中绑定变量?
【发布时间】:2016-05-27 10:42:29
【问题描述】:

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

(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.:真正的宏返回一个传感器 - 绑定是传感器的状态,函数是传感器的阶跃函数

【问题讨论】:

  • 也许 letfor 在 Cursive 中被当作特殊情况处理?很难说,因为 Cursive 是封闭源代码。
  • 顺便说一句,你不需要做[~@binds]。您可以使用(let ~binds ~f)
  • @leetwinski 哈哈,你是对的,谢谢
  • 这是目前正在处理的 Cursive 中的一个已知问题(例如,请参阅 github.com/cursive-ide/cursive/issues/147)。目前,唯一的补救措施似乎是在 beta 版本 1.3.0-eap1 中,您可以在其中指示 Cursive 解析宏中的绑定,就好像它是 letcursive-ide.com/userguide/macros.html 另一个解决方案是完全禁用未解析符号的突出显示(设置 → 语言和框架 → Clojure → 突出显示未解析的符号)。
  • @superkonduktr 哦!谢谢先生。

标签: variables binding clojure macros cursive


【解决方案1】:

取自@superkonduktr 评论:

这是 Cursive 中的一个已知问题,目前是 worked on。目前,唯一的补救措施似乎是在 beta 版本 1.3.0-eap1 中,您可以在其中指示 Cursive 解析宏 as if it was a let 中的绑定。另一种解决方案是完全禁用突出显示未解析的符号(设置 → 语言和框架 → Clojure → 突出显示未解析的符号)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多