A bemenet és kimenet kezeléséhez szükséges függvényeket az IO modul biztosítja.
IO.puts/2 egy stringet ír a szabványos kimenetre, majd egy sortörést fűz hozzá. :ok-t ad vissza.IO.write/2 egy stringet ír a szabványos kimenetre, sortörés hozzáadása nélkül. :ok-t ad vissza.IO.gets/2 beolvas egy sort a szabványos bemenetről.IO.inspect/2 bármit kiír a szabványos kimenetre, és hasznos beállításokat fogad el, például a :label-t. Változatlanul adja vissza a kapott értéket. Debugoláshoz hasznos.String.Chars protokollHa olyan értéket próbálsz átadni az IO.puts/2 függvénynek, amit az nem tud kiírni, Protocol.UndefinedError hibát kapsz.
IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple
Ilyenkor érdemes lehet inkább az IO.inspect/2 függvényt használni.
IO.inspect/2 a debugoláshozAz IO.inspect/2 tökéletes a debugoláshoz, mert változatlanul adja vissza az argumentumát, bármit ki tud írni, és kínál egy :label beállítást.
"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")
# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"
Ezeknek a függvényeknek az első argumentuma egy IO-eszköz, alapértelmezés szerint :stdio (szabványos bemenet/kimenet). A szabványos hibakimenetre való íráshoz használd helyette a :stderr-t. Egy IO-eszköz lehet egy folyamat is, például amit a File.open/2 meghívásával hozol létre, így akár fájlba is írhatsz.