Hi,
I have this use-case for (update-in) which keeps showing up in my code 
which I don't have a solution for and I'm wondering if there isn't a 
solution.
How do I _efficiently_ obtain the new value created by an invocation of 
(update-in), that is, without having to get the modified value by lookups 
in the new map?

Simplified example:

(def m {:planet {:country {:state {:city {:borough 4}}}}})

(let [mm (update-in m
                    [:planet :country :state :city :borough]
                    (fn [old] (if (nil? old) 0 (inc old))))]
  (get-in mm [:planet :country :state :city :borough]))

(update-in) returns the new/modified map, but what I want is to obtain the 
new count returned by the anonymous function.
Having to call (get-in) right after is inefficient.

This is obviously a contrived example for this question, but I have a lot 
of real use cases for this (where at the top level of my app I have a ref 
for a deep structure which changes as a response to network events).

Is there an idiomatic way to do this without having to resort to mutability?
(The only solution that comes to my mind is to wrap up update-in and the 
modifier function with a special version that updates a local mutable and 
return both the new map and the new object.)
Nasty?

Thank you,



-- 
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

Reply via email to