persistent!

added
1.1

ns
clojure.core

type
function

(persistent! coll)

Returns a new, persistent version of the transient collection, in
constant time. The transient collection cannot be used after this
call, any such use will throw an exception.

                user> (def foo (transient [1 2 3]))
#'user/foo
user> foo
#<TransientVector clojure.lang.PersistentVector$TransientVector@12c9b4d1>
user> (persistent! foo)
[1 2 3]
user> foo
#<TransientVector clojure.lang.PersistentVector$TransientVector@12c9b4d1>
user> (conj! foo 4)
→ ERROR:Transient used after persistent! call
user> (persistent! foo)
→ ERROR: Transient used after persistent! call
            
                ;; Use persistent! to evaluate your object,
;; once the computation is complete

(loop [large-set (transient #{})
       i 0]
  (if (< i 100000)
    (recur (conj! large-set i) (inc i))
    (persistent! large-set)))

;; Returns a large set *much* faster than its
;; persistent version. While keeping the same
;; code structure