Vars 虽然是一种通用的引用结构,但用于实现绑定,并且有特殊的读取器和打印机表示法,反映了这种现实。与 Keywords 和 Symbols 不同,Vars 在打印时虽然表现出命名,但实际上并没有实现 clojure.lang.Named 接口。
附带的补丁实现了 Vars 上的命名。
示例
`
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 项目这样的应用程序中很有用,其中 Vars 经常直接用作值,在这些场景中,它们理想上可以与表示它们的符号值互换。