2011-01-07 17 views
6

Sto provando a sputare un vettore come [[1 2 3] [4 5 6]] in un file e poi lo borbotto, ma quando lo bevo lo ottengo una stringa non un vettore . Anche se valuto la stringa che ottengo, viene comunque data una stringa. Ho provato a usare (vettori slurpt-string) ancora a dare un vettore di un elemento contenente la stringa. Eventuali commenti?Sputa e sorseggia un vettore in Clojure

Grazie in anticipo.

risposta

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

Grazie, la stringa di lettura è la risposta! – Ali

+2

@Ali Attenzione però a ciò che leggi con read-string. Può leggere qualsiasi oggetto che può essere letto, non solo un vettore. Questo include il codice. Se * read-eval * è impostato su true (ed è di default) e la stringa usa la macro # = read-eval, read-string può persino eseguire codice. Pertanto, è possibile che venga utilizzato maliziosamente. Ad esempio, qualcuno sostituisce il vettore nel tuo file con il codice in 'rm -rt/home/ali /';) – Rayne

+0

@Rayne In realtà voglio usarlo per inviare versioni aggiornate di un vettore da un server ai client e viceversa. Il mio ambiente è un cluster locale non connesso all'esterno e lo ritengo privo di attività dannose! (Lo so, lo so!). Ma se non lo fosse, allora ho bisogno di prendere la stringa e analizzarla per assicurarmi che sto valutando solo il vettore giusto? – Ali

Problemi correlati