處理輸入與輸出的函式由 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 建立的行程,這樣就能寫入檔案。