iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0

IO 模組

IO.puts/2

我們先前有稍微使用 IO.puts/2 來印出結果

我們在 iex 中使用試試看

iex(4)> IO.puts(3)
3
:ok

印出 3 之後,IO.puts(3) 的回傳值為 :ok

不過 puts 只能印出能轉成文字的內容,在其他像是 map 測會報錯

iex(5)> IO.puts(%{name: "Tim"})
** (Protocol.UndefinedError) protocol String.Chars not implemented for type Map

Got value:

    %{name: "Tim"}

    (elixir 1.18.4) lib/string/chars.ex:3: String.Chars.impl_for!/1
    (elixir 1.18.4) lib/string/chars.ex:22: String.Chars.to_string/1
    (elixir 1.18.4) lib/io.ex:807: IO.puts/2
    iex:5: (file)

如果需要 debug 觀察欄位的值的話會使用接下來的 IO.inspect/2

IO.inspect/2

iex(3)> IO.inspect(3)
3
3

使用後乍看之下跟 puts 差不多,但是他顯示的是值在 Elixir 語法,而不是像 IO.puts/2 是給類似 CLI 介面互動使用的印出,這個可供 debug 使用

iex(5)> IO.inspect(%{name: "Tim"})
%{name: "Tim"}
%{name: "Tim"}

另外這個函式回傳的值為傳入的值,所以當我們要 debug 連續 pipe 的程式碼時,可以安心的在要查看的地方直接加入 |> IO.inspect() 而不影響後續的 pipe

原本的程式碼

["Elixir", "Erlang", "Gleam"]
|> Enum.sort()
|> Enum.map(&String.length/1)
|> Enum.sum()

如果我們要看在 sum 之前的值

["Elixir", "Erlang", "Gleam"]
|> Enum.sort()
|> Enum.map(&String.length/1)
|> IO.inspect()
|> Enum.sum()

IO.gets/2

在 CLI 介面提供文字輸入

IO.gets("輸入你的名字: ")

上一篇
透過呼叫 API 來實戰演練 2
下一篇
文件、註解與文件測試
系列文
通勤看手機就可讀懂的 Elixir 語言入門教學17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言