2011-01-07 5 views
6

Ich versuche, einen Vektor wie [[1 2 3] [4 5 6]] in eine Datei zu spucken und schlürfen es später, aber wenn ich es schlürfe, bekomme ich eine Zeichenfolge, kein Vektor . Selbst wenn ich die Zeichenfolge auswerte, die ich bekomme, gibt es immer noch eine Zeichenfolge. Ich habe versucht, (Vektoren slurpt-string) zu verwenden, aber es gibt einen Ein-Element-Vektor, der die Zeichenfolge enthält. Irgendwelche Kommentare?Spit und Slurp einen Vektor in Clojure

Vielen Dank im Voraus.

Antwort

6

clojure.core/read-string

(spit "foo" [[1 2 3] [4 5 6]])

(slurp "foo") ; "[[1 2 3] [4 5 6]]"

(read-string *1) ; [[1 2 3] [4 5 6]]

(type *1) ; clojure.lang.PersistentVector


(read-string "[[1 2 3] [4 5 6]]")

+0

Danke, also lesen String ist die Antwort! – Ali

+2

@Ali Seien Sie vorsichtig, was Sie mit read-string obwohl lesen. Es kann jedes Objekt lesen, das gelesen werden kann, nicht nur ein Vektor. Das beinhaltet Code. Wenn * read-eval * auf "true" gesetzt ist (und dies standardmäßig ist) und die Zeichenfolge das Makro # = read-eval verwendet, kann read-string sogar Code ausführen. Daher ist es möglich, dass es bösartig verwendet wird. Zum Beispiel ersetzt jemand den Vektor in Ihrer Datei mit Code zu 'rm -rt/home/ali /';) – Rayne

+0

@Rayne Ich möchte dies verwenden, um aktualisierte Versionen eines Vektors von einem Server zu Clients und zurück zu senden. Meine Umgebung ist ein lokaler Cluster, der nicht mit der Außenwelt verbunden ist und ich halte ihn für frei von bösartigen Aktivitäten! (Ich weiß, ich weiß!). Aber wenn es nicht war, dann muss ich die Zeichenfolge abrufen und analysieren, um sicherzustellen, dass ich nur den Vektor richtig bewerte? – Ali

Verwandte Themen