gpt4 book ai didi

Clojure 函数和 gensym

转载 作者:行者123 更新时间:2023-12-01 18:43:51 25 4
gpt4 key购买 nike

我对 Clojure 中的一些代码有疑问 compojure图书馆。

(defn compile-route
"Compile a route in the form (method path & body) into a function."
[method route bindings body]
`(make-route
~method ~(prepare-route route)
(fn [request#]
(let-request [~bindings request#] ~@body))))

我只见过在宏上下文中使用 gensym,它们用于防止宏中使用的绑定(bind)与本地范围内的绑定(bind)之间发生冲突。

我认为,由于上面是一个函数而不是宏,因此它不受此影响。因此我想知道像宏一样编写这个函数的基本原理是什么。

(如果您想知道,我检查了提交历史记录,看看这个函数最初是否是作为宏编写的。事实并非如此。)

最佳答案

Gensyms(至少是 -# 表示法)不是在宏上下文中使用,而是在反引号上下文中使用。为了或多或少地保证macro hygiene ,不能解析为全局限定符号的符号不能在反引号上下文中使用。虽然这不是强制执行的,并且如果您确实想要一个不合格的符号,则有一个逃生舱口,但它提供了一个合理的默认值。有关 Clojure 中宏观卫生的更详细讨论,请参阅 this博客文章。

关于Clojure 函数和 gensym,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111944/

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