Some Fine Print

Symbol 对象有一个 String 类型的名字以及一个 String 类型的名字空间名字(叫做 ns ), 但是没有值。它使用一个字符串的名字空间而不是一个名字空间对象使得它可以指向一个还不存在的名字空间。 Var 对象有一个执行 Symbol 对象的引用 (叫做 sym ), 一个指向 Namespace 对象的引用 (叫做 ns ) 以及一个 Object 类型的对象(也就是它的root value, 叫做 root ). Namespace 对象bjects有一个指向 Map 的引用, 这个map维护 Symbol 对象和 Var 对象的对应关系 (叫做 mappings )。同时它还有一个map来维护 Symbol 别名和 Namespace 对象之间的关系 (叫做 namespaces ). 下面这个类图显示了Java里面的类和接口在Clojure里面的实现。在Clojure里面 "interning" 这个单词一般指的是添加一个 SymbolVar 的对应关系到一个 Namespace 里面去。

class diagram