gpt4 book ai didi

clojure - clojure 的新手,试图理解一个表达式

转载 作者:行者123 更新时间:2023-12-04 13:59:00 28 4
gpt4 key购买 nike

我是clojure的新手,你能解释一下这是什么意思吗?

(defonce ^:dynamic *some-var1* nil)

我理解“defonce”,但不理解其余的表达方式。什么是“^”?什么是“动态”? 尤其是变量名中的“*”是什么?

最佳答案

defonce宏(与许多其他宏一样)允许您指定一些元数据作为第一个参数。此元数据通常用于向编译器提供有关符号使用方式的提示。

在这种情况下,^:dynamic提供了 metadata 关键字,让编译器知道这个符号应该被优化,以便在运行时使用 binding form 动态反弹。 .

星号只是让其他开发人员知道该符号未以常规方式绑定(bind)的约定。他们在那里提请注意它可能无法按您期望的方式工作。

例如,binding form 是线程局部的,符号只在 form 范围内反弹。

(defonce ^:dynamic *my-var* false)

(binding [*my-var* true] *my-var*) ;; true

*my-var* ;; false

尝试访问 *my-var* 的值从绑定(bind)外部可能不会返回您期望的值。

因为这个表格已经用 *special-var* 表示了。按照惯例,我们知道不要期望正常行为,并且可以在其他地方引用符号之前阅读文档或研究代码。

关于clojure - clojure 的新手,试图理解一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34692221/

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