gpt4 book ai didi

clojure - Clojure 中 ~' or ' ~ 的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 10:56:34 25 4
gpt4 key购买 nike

我正在学习 Clojure 宏,代码示例有时会有 '~symbol 结构或者~'symbol .我知道(quote'防止表单被评估,并且反引号另外添加命名空间限定,并且 ~ 导致被引用的表单被评估。我的问题是:为什么停止然后开始评估有用?我还假设 ~'symbol'~symbol是不同的,但如何呢?

最佳答案

~'symbol用于产生不合格的符号。 Clojure 的宏默认捕获命名空间,因此宏中的符号通常会解析为 (your-namespace/symbol) . unquote-quote 成语直接导致简单的、不合格的符号名称 - (symbol) - 通过评估引用的符号。来自 Clojure 的喜悦:

(defmacro awhen [expr & body]
`(let [~'it ~expr] ; refer to the expression as "it" inside the body
(when ~'it
(do ~@body))))

(awhen [:a :b :c] (second it)) ; :b
'~symbol可能用于在宏中插入名称或类似的东西。在这里, symbol将绑定(bind)到一个值 - let [symbol 'my-symbol] .然后将该值插入到宏通过计算 symbol 生成的代码中。 .
(defmacro def-symbol-print [sym]
`(defn ~(symbol (str "print-" sym)) []
(println '~sym))) ; print the symbol name passed to the macro

(def-symbol-print foo)
(print-foo) ; foo

关于clojure - Clojure 中 ~' or ' ~ 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11959107/

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