Verwendung von Clojure-Transienten

Ich bin ein bisschen mit der Verwendung von Transienten in Clojure verloren. Jede Hilfe wird geschätzt. Der Beispielcode:

(defn test-transient [v]
    (let [b (transient [])]
        (for [x v] (conj! b x))
        (persistent! b)))

user> (test-transient [1 2 3])
[]

Ich habe versucht, es vor der Rückkehr dauerhaft zu machen, und das Ergebnis ist:

(defn test-transient2 [v]
    (let [b (transient [])]
        (for [x v] (conj! b x))
        (persistent! b)
        b))

user> (test-transient2 [1 2 3])
#<TransientVector clojure.lang.PersistentVector$TransientVector@1dfde20>

Aber wenn ich Konj verwende! separat scheint es ok zu funktionieren:

(defn test-transient3 [v]
    (let [b (transient [])]
    (conj! b 0)
    (conj! b 1)
    (conj! b 2)
    (persistent! b)))

user> (test-transient3 [1 2 3])
[0 1 2]

Hat denn eine Einschränkung? Wenn ja, wie kann ich Werte von persistenten Vektoren in transiente kopieren?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage