2011-01-07 16 views
6

Bir dosyaya [[1 2 3] [4 5 6]] gibi bir vektöre tükürmeye çalışıyorum ve daha sonra bulamacağım, ancak ben bulamıyorum, bir vektör değil bir dize olsun . Aldığım dizeyi değerlendirsem bile, hala bir ip veriyor. Kullanmayı denedim (vektörler slurpt-string) hala string içeren bir eleman vektörü veriyor. Herhangi bir yorumunuz var mı?Clojure'da bir vektör Tükürme ve Slurp

Şimdiden teşekkürler.

cevap

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

Teşekkürler, bu yüzden okuma-dize cevaptır! – Ali

+2

@Ali Okuma-dizgisiyle okuduğunuza dikkat edin. Okunabilir herhangi bir nesneyi okuyabilir, sadece bir vektörü değil. Bu kod içerir. * Read-eval * öğesi true olarak ayarlanmışsa (ve varsayılan olarak) ve dize # = read-eval makrosunu kullanırsa, read-string bile kod çalıştırabilir. Bu nedenle, kötü amaçlı kullanılması mümkündür. Örneğin, birisi dosyanızdaki vektörü "rm -rt/home/ali /'; koduyla değiştirir;) – Rayne

+0

@Rayne Aslında bir sunucunun güncellenmiş sürümlerini istemcilere ve sunucuya göndermek istiyorum. Ortamım dışarıya bağlı olmayan yerel bir kümedir ve kötü amaçlı etkinliklerden arınmış olduğunu düşünmüyorum! (Biliyorum biliyorum!). Ama değilse, o zaman sadece vektör hakkını değerlendirdiğimden emin olmak için dizeyi almam ve ayrıştırmam gerekiyor. – Ali