OK, I've found something that shows how these two work when used in the implementation of a generator:
https://gist.github.com/daveray/1263503 I think I understand what the problem is now: (reset! id (inc @id)) There's a "time gap" in between the dereference of 'id' and its assignment back to 'id' (after being incremented). With swap!, no such problem exists, because it's an atomic operation where there is no such "time gap" between dereferencing, applying a function, and setting the new value. That all takes place in on magical atomic moment. If I've got this wrong, please let me know! Cheers, Greg On Jun 28, 2013, at 11:19 PM, Greg <g...@kinostudios.com> wrote: > Can anyone explain the relationship between swap! and reset! ? > > Why is using swap! in this example "safe" and using reset! not? > > I've tried searching google for comparisons of the two but can't find > anything, and the documentation doesn't help much. > > Thanks, > Greg > > On Jan 21, 2013, at 6:22 PM, Stephen Compall <stephen.comp...@gmail.com> > wrote: > >> On Jan 21, 2013 3:28 PM, "Jim - FooBar();" <jimpil1...@gmail.com> wrote: >> > ...or you can go all the way, skipping reset! completely: >> > >> > (swap! game-objects (fn [objects] (reduce-kv #(assoc % %2 (update-object >> > %3)) {} objects) )) >> >> Which also has the benefit of being safe, unlike any reset!-based update. >> >> -- >> Stephen Compall >> If anyone in the MSA is online, you should watch this flythrough. >> >> >> -- >> 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 > > > -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.