一段关于Clojure (事务) 代码的分析_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 一段关于Clojure (事务) 代码的分析

一段关于Clojure (事务) 代码的分析

 2014/4/8 21:30:36  flyfoxs  程序员俱乐部  我要评论(0)
  • 摘要:这段代码截取于:<<Clojure程序设计>>第五章,ProgrammingClojure,2ndedition:以后有空,会写一个Clojure于Oracle事物和MVCC的比较,附件是这本书的英文版本.(defrecordMessage[sendertext]);定义了一个Message对象,这个对象的构造函数有二个参数:sender,text(defmessages(ref()));定义了一个空的ref,用来存储所有的Message(defbackup-agent
  • 标签:代码 分析

?

这段代码截取于:<<Clojure程序设计>>第五章, Programming Clojure, 2nd edition:

?

以后有空,会写一个Clojure于Oracle事物和MVCC的比较,

?

附件是这本书的英文版本.

?

class="ruby">(defrecord Message [sender text]) ;定义了一个Message对象,这个对象的构造函数有二个参数:sender, text

(def messages (ref ())) ;定义了一个空的ref, 用来存储所有的Message

(def backup-agent (agent "messages-backup.clj")) ;定义了一个Agent,用来存储文件名, 为什么需要定义成Agent?

(defn add-message-with-backup [msg] ;定义了一个函数,用来往message中添加消息
;开启了一个事务
  (dosync  
;合并/添加新消息到已有消息里面, 并将合并后的消息绑定到snapshot
   (let [snapshot (commute messages conj msg)] 
;send-off 一个匿名函数给 backup-agent
     (send-off backup-agent (fn [filename]
;将合并后的消息,输出到文件做持久化,类似于ACID中的Duration 	 
			      (spit filename snapshot) 
;把filename作为函数的返回值,也就是函数入参直接作为返回值; 
;如果不执行这一行,第一次执行不会有任何错误.但是当第二次执行就会出现异常,;
 因为backup-agent已经不再存储的filename,而是(spit filename snapshot).				  
		 			       filename 
				  ))			  
;打印最新合并后的消息到控制台,作为整个事务结束的输出消息					  
     snapshot 
	 )))
	 
(add-message-with-backup (user.Message. "John" "Message One")) ;user是默认的名称空间 Message. 对应于Java里面的new Message(); ;John是构造函数的参数一, "Message One"是构造函数的参数二.	

(add-message-with-backup (str "Normal Message")) ;add-message-with-backup不仅仅可以输入Message对象,也可以输入一个普通的字符串
 

?

  • Programming_Clojure__2nd_edition.pdf (5.6 MB)
  • 下载次数: 0
上一篇: java connection to oracle 下一篇: 没有下一篇了!
发表评论
用户名: 匿名