变量在作为一个通用的引用结构时,用于实现绑定,并且有反映这一现实的特殊读取器和打印符号。与共享“命名空间/名称”符号的 Keywords 和 Symbols 不同,变量在打印时虽然像命名一样,但实际上并没有实现 clojure.lang.Named 接口。
附加的补丁实现了变量命名。
示例
`
user=> (name :clojure.core/conj)
"conj"
user=> (namespace :clojure.core/conj)
"clojure.core"
user=> (name 'clojure.core/conj)
"conj"
user=> (namespace 'clojure.core/conj)
"clojure.core"
user=> (name #'clojure.core/conj)
"conj"
user=> (namespace #'clojure.core/conj)
"clojure.core"
user=> (with-local-vars [x 1] (name x))
"--unnamed--"
user=> (with-local-vars [x 1] (namespace x))
nil
user=> (with-local-vars [x 1] (println x))
<Var: --unnamed-->
`
这对于 CinC 项目等应用程序来说非常有用,在这些应用程序中,变量经常被直接用作值,而这个上下文中它们与所表示的符号的绑定值应该是可以互换的。