क्लोजर में डबलिंग करते समय मैंने जो भी उपयोगकर्ता टाइप किया है उसे गूंजने के लिए एक बहुत ही बुनियादी कार्यक्रम लिखा है। हालांकि, यह इस तरह से नहीं चलता है कि मैं प्राकृतिक होने वाला महसूस कर रहा हूं।क्लोजर - ऑर्डर से बाहर होने वाले साइड इफेक्ट्स
(defn goo []
(print "echo> ")
(def resp (read-line))
(print resp)
)
मैं कोड (read-line
को इनपुट के रूप में foo
में टाइप मेरे लिए) इस तरह चलाने के लिए उम्मीद करेंगे: कोड यह
user=> (goo)
echo> foo
foonil
लेकिन बजाय, गूंज और पढ़ने के लिए लाइन है स्विच किया गया:
user=> (goo)
foo
echo> foonil
ऐसा क्यों होता है? क्या कोई कमी है जो मुझे याद आ रही है?
संपादित करें: जो जवाब से, अद्यतन सही समाधान है:
(defn goo []
(print "echo> ")
(flush)
(def resp (read-line))
(print resp)
(flush)
)
इसके अलावा, flushes आवश्यक नहीं हैं यदि आप println
बजाय print
का उपयोग करें।
कि यह किया! प्रिंट के बाद इसे जोड़ने (फ्लश)। शीघ्र जवाब देने के लिए ध्न्यवाद! –
कूल। अब मेरे पास एक ऐसी भाषा में एक चेक किया गया जवाब है जिसे मैं नहीं जानता। :-) मैं खुशी से मदद कर सकता है। – jmucchiello
अच्छा कौशल! क्लोजर को जानता है जो किसी से जिज्ञासा से बाहर है लेकिन stdout buffers के आंतरिक कामकाज नहीं ... यह समस्या बिल्कुल क्यों होती है? अजीब लगता है कि आदेश एक बफर के भीतर बदला जा सकता है ..... – mikera