इनपुट और आउटपुट संभालने वाले फंक्शन IO मॉड्यूल में दिए गए हैं।
IO.puts/2 मानक आउटपुट पर एक स्ट्रिंग लिखता है, और उसके बाद एक नई लाइन जोड़ता है। :ok लौटाता है।IO.write/2 मानक आउटपुट पर एक स्ट्रिंग लिखता है, बिना कोई नई लाइन जोड़े। :ok लौटाता है।IO.gets/2 मानक इनपुट से एक लाइन पढ़ता है।IO.inspect/2 कुछ भी मानक आउटपुट पर लिखता है, और :label जैसे काम के ऑप्शन लेता है। जो वैल्यू इसे दी जाती है, उसे बिना बदले ही लौटा देता है। डीबगिंग के लिए यह बहुत उपयोगी है।String.Chars प्रोटोकॉलअगर आप IO.puts/2 को कोई ऐसी वैल्यू देने की कोशिश करते हैं जिसे वह प्रिंट नहीं कर सकता, तो आपको Protocol.UndefinedError एरर मिलती है।
IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple
ऐसा होने पर आप इसकी जगह IO.inspect/2 इस्तेमाल कर सकते हैं।
IO.inspect/2
IO.inspect/2 डीबगिंग के लिए एकदम सही है, क्योंकि यह अपना आर्गुमेंट बिना बदले लौटा देता है, कुछ भी प्रिंट कर सकता है, और इसमें :label ऑप्शन भी मिलता है।
"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")
# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"
इन सभी फंक्शन का पहला आर्गुमेंट एक IO डिवाइस होता है, जिसकी डिफॉल्ट वैल्यू :stdio (मानक इनपुट/आउटपुट) होती है। मानक एरर डिवाइस पर लिखने के लिए इसकी जगह :stderr इस्तेमाल कीजिए। IO डिवाइस कोई प्रोसेस भी हो सकता है, जैसे File.open/2 को कॉल करके बनाया गया प्रोसेस, जिससे किसी फाइल में लिखा जा सकता है।