चारों ओर गुगल करने से, मैंने पाया कि while
लूप का उपयोग या चर का उपयोग करना निराश है। यदि इनपुट है 10:abcdefghej
यह कोलन के बाद 10
तो पढ़ अगले 10 बाइट्स पार्स आउट कर देगा:क्लोजर वैरिएबल और लूपिंग
अब मैं एक बहुत ही सरल एल्गोरिथ्म है कि एक InputStream से पात्रों पढ़ सकते हैं और तदनुसार पार्स जाएगा कार्यान्वित किया।
जिस चीज के साथ मैं खो गया हूं वह यह है कि मैं इसे कैसे दोबारा कर सकता हूं ताकि यह चर पर निर्भर न हो।
(defn decode-string [input-stream indicator]
(with-local-vars [length (str (char indicator))
delimiter (.read input-stream)
string (str "")
counter 0 ]
(while (not(= (var-get delimiter) 58))
(var-set length (str (var-get length) (char (var-get delimiter))))
(var-set delimiter (.read input-stream)))
(var-set length (new BigInteger (var-get length)))
(var-set counter (var-get length))
(while (not(zero? (var-get counter)))
(var-set string (str (var-get string) (char (.read input-stream)) ))
(var-set counter (dec (var-get counter))))
(var-get string)))
इसके अलावा, मैं समझता हूँ कि चर घोषित करने के लिए एक ही रास्ता with-local-vars
कीवर्ड का उपयोग कर रहा है। यह एक तरह से अव्यावहारिक शुरुआत में एक ब्लॉक में सभी चर को परिभाषित करने के लिए, या मैं कुछ महत्वपूर्ण बिंदु याद आ रही है नहीं है?
आपके द्वारा हमेशा ऐसे महान कार्यात्मक उत्तर! +1 – bmillare
स्ट्रिंग के बजाय स्ट्रीम लेने का निर्णय फ़ंक्शन को और अधिक अनुकूल बनाता है। शुरुआत के लिए अध्ययन करने के लिए यह एक महान क्लोजर स्निपेट है। –