Ell*_*mer 3 macros symbols clojure
不知道如何表达这个..
我写了一个带有两个参数的宏.第一个基本上包含用于生成let表达式的标识符.第二个是在let表达式中使用的代码(它希望能够访问这些标识符).
一个例子:
(match (Add {ast-> x}) (println x))
Run Code Online (Sandbox Code Playgroud)
当第二个参数是原始代码时,事情很好地工作.x绑定到let表达式中定义的x(当macroexpanded时,它只显示为x).但是,当第二个参数是生成(println x)的宏时,x会扩展为类似user/x的内容.
关于如何解决这个问题的任何好主意?
小智 6
听起来你的第二个宏被定义为:
(defmacro foo
[]
`(println x))
Run Code Online (Sandbox Code Playgroud)
这是不正确的,因为x命名空间限定.在这种情况下,第二个宏的正确版本将是:
(defmacro foo
[]
`(println ~'x))
Run Code Online (Sandbox Code Playgroud)
现在x,println调用中将是一个文字x符号,而不是命名空间限定.