Vars 虽然是一种通用的引用结构,但用于实现绑定,并具有反映这一现实的特殊读取器和打印机符号。与 Vars 共享 “namespace/name” 符号的 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 常常直接作为值使用,在这些上下文中它们可以与它们表示的值的 Symbols 互换。