我对clojure很新,我正在经历各种代码挑战/练习,以及一般的API.
我理解在符号的两端用*命名动态变量的约定
eg: *myvar* ..
我也理解插入符号的应用,例如动态变量
eg: ^:dynamic ..
但我对有时候带有*的符号/变量结尾的约定感到困惑,但不是以*开头.
eg: list*.
以下是我发现令人困惑的其他一些元数据表单.我理解它们为宏和特殊表单提供了额外的信息..但是,你何时会使用哪些以及如何使用?..
^Type ? ^{:tag Type}
^:key ? ^{:key true}
^:private
^{:once true}
Run Code Online (Sandbox Code Playgroud)
任何有明确解释的解释或链接都将受到赞赏.
在Clojure中,函数(或宏)的内部版本的结尾是常见的*:非*版本是用户应该调用的公共版本.有时,这是一个围绕内部函数提供自定义语法的宏.
这方面的一个极端的情况下发生在Clojure的核心库,其中几种形式(fn*,let*等)底部的是,得到理解和执行在编译器本身作为特殊形式.这只是他们的名字结束的惯例*.
最后提到的元标记在http://clojure.org/metadata中描述.
^Type表单用于为下一个表单的类型提供类型提示:这用于在编译类型不明确的Java互操作调用时避免反射.更多信息:http:
//clojure.org/java_interop#Java%20Interop-Type%20Hints^:key表单用于提供各种布尔标志 - 例如^:dynamic标记动态变量.见
http://clojure.org/vars^:private表单可防止符号在名称空间的公共符号中列出(尽管它仍可用于查找和解除引用作为Var:#'foo.更多信息,请访问:http:
//clojure.org/special_forms^{:once true}是编译器可以使用的一些元数据,以避免保留垃圾收集的中间对象(有关更多详细信息,请参见
此处).这是一项高级优化,您应该很少担心.| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |