什么是::用于clojure?

时间:2011-04-24 14:47:30

标签: clojure

我理解Clojure中的关键字是:关键字。但是::用于什么?为什么看起来它有绑定?

user=> :foo
:foo
user=> ::foo
:user/foo

2 个答案:

答案 0 :(得分:74)

双冒号是to fully qualify keywords与您当前的命名空间。这是为了避免对不同库有意义的关键字的名称冲突。如果没有完全限定的关键字,您可能会意外覆盖地图中的某些值并破坏与库的兼容性。

答案 1 :(得分:23)

正如现在记录的for Clojure以及for ClojureScript::关键字也可用于解析命名空间别名。例如,如果::foo/bar:clojure.core/bar的别名,foo将评估为clojure.core。如果foo未解析为命名空间,则抛出Reader异常。