2011-01-07 7 views
6

में एक वेक्टर थूक और स्लर्प एक फ़ाइल में [[1 2 3] [4 5 6]] जैसे वेक्टर को थूकने की कोशिश कर रहा है और बाद में इसे फिसल रहा हूं, लेकिन जब मैं इसे फिसलता हूं तो मुझे एक स्ट्रिंग नहीं मिलता है । यहां तक ​​कि अगर मैं स्ट्रिंग का मूल्यांकन करता हूं, तो भी यह एक स्ट्रिंग देता है। मैंने (वेक्टर स्लर्प-स्ट्रिंग) का उपयोग करने की कोशिश की, फिर भी यह स्ट्रिंग युक्त एक तत्व वेक्टर प्रदान करता है। कोई टिप्पणी?क्लोजर

अग्रिम धन्यवाद।

उत्तर

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

धन्यवाद, इसलिए पढ़ने-स्ट्रिंग जवाब है! – Ali

+2

@Ali हालांकि रीड-स्ट्रिंग के साथ आप जो भी पढ़ते हैं उसे सावधान रहें। यह किसी ऑब्जेक्ट को पढ़ सकता है जिसे पढ़ा जा सकता है, केवल एक वेक्टर नहीं। इसमें कोड शामिल है। यदि * read-eval * को सत्य पर सेट किया गया है (और यह डिफ़ॉल्ट रूप से है) और स्ट्रिंग # = read-eval macro का उपयोग करती है, तो रीड-स्ट्रिंग भी कोड निष्पादित कर सकती है। इसलिए, दुर्भावनापूर्ण रूप से इसका उपयोग करना संभव है। उदाहरण के लिए, कोई व्यक्ति आपकी फ़ाइल में वेक्टर को 'rm -rt/home/ali/';' – Rayne

+0

@Rayne में वास्तव में बदलता है, मैं वास्तव में इसका उपयोग सर्वर से ग्राहकों और बैक पर एक वेक्टर के अद्यतन संस्करण भेजने के लिए करना चाहता हूं। मेरा पर्यावरण एक स्थानीय क्लस्टर है जो बाहर से जुड़ा नहीं है और मैं इसे दुर्भावनापूर्ण गतिविधि से मुक्त मानता हूं! (मैं जानता हूँ मैं जानता हूँ!)। लेकिन अगर ऐसा नहीं होता है, तो मुझे यह सुनिश्चित करने के लिए स्ट्रिंग प्राप्त करने और उसे पार्स करने की आवश्यकता है कि मैं केवल वेक्टर अधिकार का मूल्यांकन कर रहा हूं? – Ali