2011-01-07 6 views
6

Estoy tratando de escupir un vector como [[1 2 3] [4 5 6]] en un archivo y luego sorberlo, pero cuando lo sorbo me sale una cuerda, no un vector . Incluso si evalúo la cadena que obtengo, todavía me da una cadena. Traté de usar (vectores slurpt-string) aún así le doy un vector de un elemento que contiene la cadena. ¿Algún comentario?Escupir y sorber un vector en Clojure

Gracias de antemano.

Respuesta

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

¡Gracias, la cadena de lectura es la respuesta! – Ali

+2

@Ali Sin embargo, ten cuidado con lo que lees con la cadena de lectura. Puede leer cualquier objeto que se pueda leer, no solo un vector. Eso incluye código. Si * read-eval * se establece en verdadero (y es por defecto) y la cadena utiliza la macro # = read-eval, read-string puede incluso ejecutar código. Por lo tanto, es posible que se use maliciosamente. Por ejemplo, alguien reemplaza el vector en su archivo con el código 'rm -rt/home/ali /';) – Rayne

+0

@Rayne De hecho, quiero usar esto para enviar versiones actualizadas de un vector de un servidor a clientes y viceversa. Mi entorno es un clúster local no conectado al exterior y lo considero libre de actividad maliciosa. (¡Sé que sé!). Pero si no fue así, entonces necesito obtener la cadena y analizarla para asegurarme de que estoy evaluando solo el vector, ¿verdad? – Ali

Cuestiones relacionadas