Why can not alter or ref-set ref after commute it?

2010-07-25 Thread dennis
Alter or ref-set a ref after commute would throw a
IllegalStateException:Can't set after commute

for example:

user= (def counter (ref 0))
#'user/counter
(dosync (commute counter inc) (ref-set counter 3))
java.lang.IllegalStateException: Can't set after commute
(NO_SOURCE_FILE:0)

I want to know why this should not happen?is it a explanation here? I
can't understand what is the difference with  commuting ref  after ref-
set or alter.Thanks a lot.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Why can not alter or ref-set ref after commute it?

2010-07-25 Thread dennis
Thanks for your reply,Ulrich

I knew that comute would rerun before the commit,but my problem is
that if we allow ref-set ref after commuting,it seems there is no bad
thing would happen.What's the purpose of this limitation except alter
or ref-set have no lasting result?

On Jul 25, 7:01 pm, Moritz Ulrich ulrich.mor...@googlemail.com
wrote:
 Read the documentation of commute 
 carefully:http://richhickey.github.com/clojure/clojure.core-api.html#clojure.co...

 commute acts at the end of the current dosync-block, regardless of
 when commute was applied inside it. That's the reason why you can't
 ref-set it after a commute; the commute isn't done.



 On Sun, Jul 25, 2010 at 11:19 AM, dennis killme2...@gmail.com wrote:
  Alter or ref-set a ref after commute would throw a
  IllegalStateException:Can't set after commute

  for example:

  user= (def counter (ref 0))
  #'user/counter
  (dosync (commute counter inc) (ref-set counter 3))
  java.lang.IllegalStateException: Can't set after commute
  (NO_SOURCE_FILE:0)

  I want to know why this should not happen?is it a explanation here? I
  can't understand what is the difference with  commuting ref  after ref-
  set or alter.Thanks a lot.

  --
  You received this message because you are subscribed to the Google
  Groups Clojure group.
  To post to this group, send email to clojure@googlegroups.com
  Note that posts from new members are moderated - please be patient with 
  your first post.
  To unsubscribe from this group, send email to
  clojure+unsubscr...@googlegroups.com
  For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en

 --
 Moritz Ulrich
 Programmer, Student, Almost normal Guy

 http://www.google.com/profiles/ulrich.moritz

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en