变量、绑定和命名空间使用def或defn定义了一个对象时,这个对象会被存储在一个Clojure变量(var)中。
def创建了一个名为user/foo的变量。
(def foo 10)
-> #'user/foo
符号user/foo指向一个变量,该变量绑定了10这个值。
foo
-> 10
一个变量的初始值被称为它的根绑定(root binding)。
直接引用一个变量。特殊形式(special form)var能返回变量自身,而不是变量的值。
(var a-symbol)
你可以使用var来获取绑定到user/foo上的那个变量。
(var foo)
-> #'user/foo
var与其等价的读取器宏#',它同样会返回与符号绑定的那个变量。
#'foo
-> #'user/foo
但请务必留意,除了用来保存值以外,变量还有许多其他能力。
● 同一个变量,可以在多个命名空间中具有别名
● 变量可以有元数据。
元数据包括文档、用于优化的类型提示,还有单元测试。
● 变量可基于每个线程进行动态重绑定。