寻找一些clojure特殊形式和元数据的解释
我是clojure的新手,正在经历各种代码挑战/练习,以及通用API 我理解在符号两端用*命名动态变量的惯例寻找一些clojure特殊形式和元数据的解释,clojure,Clojure,我是clojure的新手,正在经历各种代码挑战/练习,以及通用API 我理解在符号两端用*命名动态变量的惯例 例如:*myvar* 我还了解插入符号的应用,例如在动态变量上 例如:^:dynamic 但我对有时符号/变量以*结尾,而不是以*开头的惯例感到困惑 eg:list* 下面是一些我感到困惑的其他元数据形式。。我知道他们提供了宏和特殊表单的附加信息。。但是,你什么时候会使用哪一种?如何使用 ^Type → ^{:tag Type} ^:key → ^{:key true} ^:privat
例如:*myvar*
我还了解插入符号的应用,例如在动态变量上
例如:^:dynamic
但我对有时符号/变量以*结尾,而不是以*开头的惯例感到困惑
eg:list*
下面是一些我感到困惑的其他元数据形式。。我知道他们提供了宏和特殊表单的附加信息。。但是,你什么时候会使用哪一种?如何使用
^Type → ^{:tag Type}
^:key → ^{:key true}
^:private
^{:once true}
任何解释或带有清晰解释的链接都将不胜感激。在Clojure中,函数(或宏)的内部版本通常以
*
结尾:非*版本是用户应该调用的公共版本。有时,这是一个宏,它围绕内部函数提供自定义语法
Clojure核心库中出现了一种极端情况,其中有几种形式(fn*
,let*
,等等)作为特殊形式,在编译器中被理解和实现。他们的名字以*
结尾只是一种惯例
最后提到的元标记在中进行了描述
表单用于为下一个类型提供类型提示 表单:用于在编译Java互操作时避免反射 在类型不明确的地方调用。详情如下:^Type
表单用于提供各种布尔值 标志-例如^:key
标记动态变量。看见^:dynamic
表单禁止在公共场合列出符号 名称空间的符号(尽管仍可用于查找) 以及作为变量的解引用:#'foo.更多信息:^:private
是编译器可以用来避免的一点元数据 保留用于垃圾收集的中间对象(请参见 这是一个高级的 优化和一些你不应该担心的事情^{:once-true}
let
行为相同。@DaoWen,感谢您的输入..以及您的陈述(即list
和list*
)是什么让我更加困惑。后来我遇到了很多特殊字符,大部分都在这里解释过。但是没有一个是关于list*
的。我没有说list
和list*
之间没有区别,而是说在末尾添加*
似乎没有一致的含义。list*
类似于list
,但它将另一个列表作为其最后一个参数(因此它只是cons
es所有参数,但最后一个参数是最后一个).是的,你确实是对的。这对我以前来说并不明显。我只是使用了doc和source来了解list和list*之间的区别。我应该养成更经常使用doc/source的习惯。这是一个全面的报道,以及更多信息的链接。非常感谢。我会接受这个答案。