Clojure::: tag的含义

时间:2013-09-14 00:27:09

标签: clojure

最近我在Clojure遇到了{::tag 10}这样的建筑。这是什么意思?我的实验表明它是一个关键字:

=> (type :tag)
clojure.lang.Keyword
=> (type ::tag)
clojure.lang.Keyword

区别在于价值本身:

=> :tag
:tag
=> ::tag
:/user/tag

似乎::tag是名称空间限定的。猜对了吗?如果是,命名空间限定关键字和非限定关键字之间的区别是什么?什么时候有用?

1 个答案:

答案 0 :(得分:3)

双冒号是命名空间限定关键字的简写语法,具有当前命名空间。它非常适合防止在哈希映射中与外部基于关键字的键发生冲突,例如在函数元数据中包含:name和:: :: name键,或者比较参数的:name vs :: name值。

就像命名公共函数以识别它并防止名称冲突一样,当将自定义关键字作为键或值暴露时,可能会与现有关键字冲突,您应该考虑命名空间限定它。