Vars,虽然是一种通用的引用结构,但用于实现绑定,并且具有反映这一现实的特殊读取器和打印符号。与共享Vars的"name/namespace"记法的Keywords和Symbols不同,Vars没有实现clojure.lang.Named接口,即使它们打印时会像命名的一样。
附带的补丁实现了Vars上的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项目这样的应用来说很有用,其中Vars经常直接作为值使用,在这种情况下,它们理想上可以与它们所代表的表达式的绑定值交换。