变量,虽然是一种通用的引用结构,但用于实现绑定,并且具有反映这一现实特色的特殊读取器和打印表示法。与关键字和符号不同,它们与变量的 "namespace/name" 表示法共享,变量在打印时看似实现了命名,但实际上并没有实现 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 项目这样的应用程序很有用,其中变量通常直接用作值,在这种情况下,它们最好可以与表示它们的值的符号互换。