Ich weiß, wie wandelbar Vektor zu erstellen:Wie kann man Elemente aus einem veränderbaren Vektor entfernen?
(defn create-vector []
(intern *ns* (symbol "my-vector" (ref []))
=>my-namespace/my-vector
Ich weiß, wie zu diesem Vektor hinzufügen Element:
(dosync (alter my-vector conj "test"))
=>["test"]
Jetzt habe ich "test"
Zeichenfolge in meinem wandelbar Vektor. Aber wie kann ich es entfernen? Ich habe versucht, faul-Sequenz Funktion remove
(dosync (alter my-vector remove "test"))
zu verwenden, aber es funktioniert nicht. Wie kann ich Elemente aus einem veränderbaren Vektor entfernen?
EDIT: Die Sammlung muss nicht wirklich Vektor sein. Ich habe eine Lösung für die Menge gefunden, werde aber warten, wenn jemand eine Lösung für den Vektor vorschlagen wird.
Können Sie sich meine bestätigen Verstehen? Mit diesem Konstrukt ändern wir eigentlich nicht die Sammlung, sondern ändern stattdessen den Verweis @ my-vector auf den neu erstellten veränderbaren Vektor. Habe ich recht? –
tatsächlich gibt es keine veränderbaren Vektoren, aber veränderbare * Referenzen *. Ihre Vektoren bleiben immer unveränderlich, während Referenzpunkte auf eine neu konstruierte (das Datenmodell von clojure macht es zu einer ziemlich billigen Operation) – leetwinski
Nun, tatsächlich gibt es veränderbare Strukturen, Transienten zum Beispiel, (http: // clojure.org/reference/transients), aber es ist eher fortgeschrittener Optimierungspunkt, also nähern Sie sich mit Vorsicht – leetwinski