首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Clojure语言6:def & var

2013-01-02 
Clojure语言六:def & varClojure提供了一种函数和宏之外的操作形式,special form. 数量有限,并且不是Cloju

Clojure语言六:def & var

Clojure提供了一种函数和宏之外的操作形式,special form. 数量有限,并且不是Clojure语言本身实现的。

主要是下面几个:

catch,def, do, dot ('.'), finally, fn, if, let, loop, 

monitor-enter, monitor-exit, new, quote, recur, set!, throw, try 和 var.

完整文档请参考:http://clojure.org/special_forms

Vars这里要解释一下。首先,Clojure因为是函数式编程语言,所以不支持变量,只支持不变量(immutable)。好处是函数的状态不受全局变量的影响,并且在并发编程时不需要锁。那么Clojure在实践中需要支持“变量”怎么办?提供了四种机制,其中一种就是Vars. 

Var可以指向一个易变的存储地点(mutable storage location), 绑定的作用就是让一个var指向一个mutable storage location. 如果这个var不再指向任何mutable storage location, 叫做unbound.


def 这种special form就是用来创建一个var,并且将其bind到一个root value。比如下面的代码:

By default Vars are static, but per-thread bindings for Vars defined with metadata marking them as dynamic can be established via the macro binding and within-thread they obey a stack discipline:user=> (def ^:dynamic x 1)user=> (def ^:dynamic y 1)user=> (+ x y)2 user=> (binding [x 2 y 3]         (+ x y))5 user=> (+ x y)2
http://java.ociweb.com/mark/clojure/article.html#Vars 这篇文章也不错。








热点排行