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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en