我只是特别学习宏和clojure宏,我很好奇有可能做这样的事情:
(defmacro with-a=hello [f]
`(let [a "hello"] ~f))
(with-a=hello (println a))
Run Code Online (Sandbox Code Playgroud)
这对我不起作用并抛出错误: CompilerException java.lang.RuntimeException: Can't let qualified name: user/a, compiling:(NO_SOURCE_PATH:1)
正如我现在所说的那样,scheme的define-syntax允许做类似的事情,但是有没有这样的方法呢?
默认情况下,语法报价表单会`阻止在宏中引入非命名空间符号和符号捕获.当您有意这样做时,您可以使用序列~'将非限定符号引入宏.
(defmacro with-a=hello [f]
`(let [~'a "hello"] ~f))
user> (with-a=hello (println a))
hello
nil
Run Code Online (Sandbox Code Playgroud)
执行此操作的宏具有花哨的名称照应宏
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |