gpt4 book ai didi

macros - Clojure var 定义宏

转载 作者:行者123 更新时间:2023-12-04 17:52:38 25 4
gpt4 key购买 nike

我只是在学习宏和 clojure 宏,我很好奇是否可以做这样的事情:

(defmacro with-a=hello [f]
`(let [a "hello"] ~f))

(with-a=hello (println a))

这对我不起作用并引发错误: CompilerException java.lang.RuntimeException: Can't let qualified name: user/a, compiling:(NO_SOURCE_PATH:1)
正如我现在不明白的那样,scheme 的定义语法允许做这样的事情,但是有没有 clojure 方法呢?

最佳答案

默认情况下,语法引用形式` 防止在宏中引入未命名空间的符号和符号捕获。当您有意这样做时,您可以使用序列 ~'将非限定符号引入宏。

 (defmacro with-a=hello [f]
`(let [~'a "hello"] ~f))

user> (with-a=hello (println a))
hello
nil

执行此操作的宏具有花哨的名称 anaphoric macros

关于macros - Clojure var 定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708662/

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