gpt4 book ai didi

macros - Clojure 宏和符号绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 07:22:08 24 4
gpt4 key购买 nike

不知道如何表达..

我编写了一个带有两个参数的宏。第一个本质上包含用于生成 let 表达式的标识符。第二个是在 let 表达式中使用的代码(它想要访问这些标识符)。

一个例子:

(match (Add {ast-> x}) (println x))

当第二个参数是原始代码时,一切正常。 x 绑定(bind)到 let 表达式中定义的 x(当宏展开时,它仅显示为 x)。但是,当第二个参数是生成 (println x) 的宏时,x 会扩展为 user/x 之类的内容。

关于如何解决这个问题有什么好主意吗?

最佳答案

听起来你的第二个宏定义为:

(defmacro foo
[]
`(println x))

这是不正确的,因为 x 将是命名空间限定的。在这种情况下,第二个宏的正确版本是:

(defmacro foo
[]
`(println ~'x))

现在,println 调用中的 x 将是文字 x 符号,而不是命名空间限定的。

关于macros - Clojure 宏和符号绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4059457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com