मैं एक छोटे से सांत्वना कार्यक्रम मैं Clojure में जावा में लिखा अनुवाद करने के लिए कोशिश कर रहा हूँ, लेकिन मैं एक छोटे से परेशानी Clojure के मानक *out*
वर और कम से वस्तु के बीच अंतर पता लगाना हो रही है System/out
। मैं इस धारणा के तहत था कि वे एक ही बात थे, लेकिन जब मेरे परीक्षण के दौरान वे अलग दिखते थे।Clojure: * बाहर * बनाम सिस्टम/बाहर
मेरा कार्यक्रम में मैं एक नंबर दर्ज करने के लिए संकेत है, और मैं शीघ्र और पाठ दर्ज एक ही लाइन पर होना चाहता हूँ। जावा में, मैंने System.out.print()
के साथ प्रॉम्प्ट मुद्रित किया और फिर एक स्कैनर इनपुट पढ़ा।
निम्नलिखित मेरी Clojure में कुछ इसी तरह का पहला प्रयास था। जैसे कि यह read-line
से पहले, यह तुरंत इनपुट पर ब्लॉक सक्रिय किया जाना चाहिए print
समारोह लगता है और एक गड़बड़ गड़बड़ में सब कुछ के बाद प्रिंट हालांकि:
(defn inp1 []
(print "Enter your input: ")
(let [in (read-line)]
(println "Your input is: " in)))
निम्नलिखित मेरी अगली प्रयास किया गया, *out*
का उपयोग कर। यह ऊपर समारोह के रूप में एक ही समस्या से ग्रस्त है:
(defn inp2 []
(.print *out* "Enter input: ")
(let [i (read-line)]
(println "You entered: " i)))
मेरे तीसरे कोशिश पर, मैं अंत में System/out
सीधे का उपयोग करके काम करने के लिए मिल गया:
(defn inp3 []
(let [o System/out]
(.print o "Enter input: ")
(let [i (read-line)]
(println "You entered: " i))))
मुझे खुशी है कि मैं अंत में इसे करने के लिए मिल गया हूँ काम, लेकिन मैं गहराई से उलझन में हूं कि क्यों तीसरा व्यक्ति जिस तरह से चाहता है जब मैं चाहता हूं कि पहले दो न हों। पहले दो ब्लॉक तुरंत क्यों करते हैं? क्या कोई इस पर रोशनी डाल सकता है?
अब मुझे लगता है कि यह buffered है, और मुझे पहले इसे कॉल करने की आवश्यकता है। मुझे एहसास नहीं हुआ कि एक धारा थी और दूसरा लेखक था। धन्यवाद! – RGrun