Clojure 1.7 is around the corner, we’re already at version
Fortunately, the iterative approach of clojure taken since 1.3 means
that upgrading from one version to the next usually only needs a change
project.clj file (as well as working interop accross versions,
which is always nice).
There are some neat changes in 1.7, the most notable being the addition of transducers. I recommend reading through the introduction to transducers at http://blog.cognitect.com/blog/2014/8/6/transducers-are-coming and the video from strange loop at https://www.youtube.com/watch?v=6mTbuzafcII.
A much smaller addition to 1.7 is the introduction of the
update is directly equivalent to
update-in but operates on a single key.
When you wrote:
(-> input-map (update-in [:my-counter-key] inc))
You will now be able to write:
(-> input-map (update :my-counter-key inc))
This has been a long-wanted change and brings
update on par with
assoc which have their
-in suffixed equivalents.
One direct consequence of the change is that if you have a namespace
that exposes an
update function, you will need to deal with the fact
that it will now clash with
is referred by default in all namespaces.
You have two strategies to deal with that fact:
- Rename the function (which can be a bit intrusive)
clojure.core/updatefrom being referred in your namespace
For the second strategy, you will only need to use the following form in your namespace declaration:
(ns my.namespace (:require [...]) (:refer-clojure :exclude [update]))
If you don’t, your library consumers will have to deal with messages such as:
WARNING: update already refers to: #'clojure.core/update in namespace: foo.core, being replaced by: #'foo.core/update WARNING: update already refers to: #'clojure.core/update in namespace: user, being replaced by: #'foo.core/update