6 clojure
我是clojure的新手,你能解释一下这意味着什么吗?
(defonce ^:dynamic *some-var1* nil)
Run Code Online (Sandbox Code Playgroud)
我理解"defonce",但不是表达的其余部分.什么是"^"?什么是"动态"?特别是变量名中的"*"是什么?
Dan*_*nce 10
该defonce宏(许多人一样),可以指定一些元数据作为第一个参数.此元数据通常用于向编译器提供有关符号使用方式的提示.
在这种情况下,提供了^:dynamic元数据关键字,让编译器知道该符号应该被优化,以便在运行时使用binding表单进行动态反弹.
星号只是让其他开发人员知道符号没有以常规方式绑定的惯例.他们在那里提请注意它可能不会按照你期望的方式工作的事实.
例如,binding表单是线程本地的,符号只在表单范围内反弹.
(defonce ^:dynamic *my-var* false)
(binding [*my-var* true] *my-var*) ;; true
*my-var* ;; false
Run Code Online (Sandbox Code Playgroud)
尝试*my-var*从绑定外部访问值可能不会返回您期望的值.
由于此表单已使用*special-var*约定表示,因此我们知道不会期望正常行为,并且可以在其他地方引用符号之前阅读文档或研究代码.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |