我理解Clojure中的关键字是:关键字。但是::用于什么?为什么看起来它有绑定?
user=> :foo
:foo
user=> ::foo
:user/foo
答案 0 :(得分:74)
双冒号是to fully qualify keywords与您当前的命名空间。这是为了避免对不同库有意义的关键字的名称冲突。如果没有完全限定的关键字,您可能会意外覆盖地图中的某些值并破坏与库的兼容性。
答案 1 :(得分:23)
正如现在记录的for Clojure以及for ClojureScript,::
关键字也可用于解析命名空间别名。例如,如果::foo/bar
是:clojure.core/bar
的别名,foo
将评估为clojure.core
。如果foo
未解析为命名空间,则抛出Reader异常。