2011-01-07 32 views
6

Tôi đang cố gắng nhổ một véc tơ như [[1 2 3] [4 5 6]] vào một tập tin và sau đó slurp nó, nhưng khi tôi slurp nó tôi nhận được một chuỗi không phải là một vector . Ngay cả khi tôi đánh giá chuỗi tôi nhận được, nó vẫn cho một chuỗi. Tôi đã cố gắng sử dụng (vectơ slurpt-string), nó vẫn cung cấp một vector phần tử chứa chuỗi. Mọi nhận xét?Nhổ và Slurp một vector trong Clojure

Xin cảm ơn trước.

Trả lời

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

Cảm ơn, vì vậy chuỗi đọc là câu trả lời! – Ali

+2

@Ali Hãy cẩn thận với những gì bạn đọc bằng chuỗi đọc. Nó có thể đọc bất kỳ đối tượng có thể được đọc, không chỉ là một vector. Điều đó bao gồm mã. Nếu * read-eval * được đặt thành true (và theo mặc định) và chuỗi sử dụng macro # = read-eval, chuỗi đọc thậm chí có thể thực thi mã. Vì vậy, nó có thể cho nó được sử dụng độc hại. Ví dụ, ai đó thay thế vectơ trong tệp của bạn bằng mã 'rm -rt/home/ali/';) – Rayne

+0

@Rayne Tôi thực sự muốn sử dụng điều này để gửi các phiên bản cập nhật của vectơ từ máy chủ đến máy khách và ngược lại. Môi trường của tôi là một cụm cục bộ không được kết nối với bên ngoài và tôi coi nó là không có hoạt động độc hại! (Tôi biết rồi mà!). Nhưng nếu nó không được, sau đó tôi cần phải nhận được chuỗi và phân tích nó để đảm bảo rằng tôi đang đánh giá chỉ là vector phải không? – Ali

Các vấn đề liên quan