Macros Clojure宏和符号绑定
我不知道该怎么表达 我写了一个宏,它有两个参数。第一个基本上包含用于生成let表达式的标识符。第二个是要在let表达式中使用的代码(它希望能够访问这些标识符) 例如:Macros Clojure宏和符号绑定,macros,clojure,symbols,Macros,Clojure,Symbols,我不知道该怎么表达 我写了一个宏,它有两个参数。第一个基本上包含用于生成let表达式的标识符。第二个是要在let表达式中使用的代码(它希望能够访问这些标识符) 例如: (match (Add {ast-> x}) (println x)) 当第二个参数是原始代码时,一切都很顺利。x绑定到let表达式中定义的x(当宏扩展时,它只显示为x)。但是,当第二个参数是生成(println x)的宏时,x将扩展为类似user/x的内容 关于如何解决这个问题,有什么好主意吗?听起来您的第二个宏定义如下
(match (Add {ast-> x}) (println x))
当第二个参数是原始代码时,一切都很顺利。x绑定到let表达式中定义的x(当宏扩展时,它只显示为x)。但是,当第二个参数是生成(println x)的宏时,x将扩展为类似user/x的内容
关于如何解决这个问题,有什么好主意吗?听起来您的第二个宏定义如下:
(defmacro foo
[]
`(println x))
这是不正确的,因为x
将被命名空间限定。在这种情况下,第二个宏的正确版本是:
(defmacro foo
[]
`(println ~'x))
现在,println
调用中的x
将是一个文本x符号,不限定名称空间