It occurred to me that the game I was playing shunting initargs off into a "raw" key of one name or another before converting them into a map might more comprehensibly be done by treating the raw values (and other attributes I use to manage these beasts) as metadata. But I need to update the metadata during the life of my creation. So...
I found alter-meta!, and it seems perfect. Working from one of the doc examples: > (def ^{:version 1} doc2 "This is text") > (alter-meta! #'doc2 #(assoc-in % [:version] 17)) > (meta #'doc2) ;; => {:version 17} > Great! But this more realistic example throws an inscrutable error: (let [x (with-meta {:a 42} > {:raw 17})] > (alter-meta! x #(update-in % [:raw] inc)) > (meta x)) Fine. The doc clearly advertises "Atomically sets the metadata for a namespace/var/ref/agent/atom" OK, I am working with refs, let's do it!: (let [x (with-meta (ref {:a 42}) > {:raw 17})] > (alter-meta! x #(update-in % [:raw] inc)) > (meta x)) Nope. IRef cannot be cast to IObj. ...google...google... Hunh? The :meta option on ref? [1] Why the special mechanism? Well, when in Rome...: (let [x (ref {:a 42} > :meta {:m 17})] > (alter-meta! x #(assoc-in % [:m] 64)) > (meta x)) > ;; => {:m 64} Booyow! The bad news is that the metadata is about the map, not the ref. The two are meant to be inseparable (so no worries about copying the map and losing the metadata) but what happens in re synchronization? [2] If I modify the map inside the ref and the ref's metadata at the same time, will the latter "stick" even if the former gets rolled back? -hk -- 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/d/optout.