IO.inspect/2可以把調試信息直接打印到控制檯上,簡單易用,是不可或缺的調試好幫手。
基本使用
它可以打印任何的數據類型,並且可以定製protocol來打印自定義的數據。
對比IO.puts,它能直接打印的數據類型就少得多了,比如:基本的數據類型,原子,字符串,IOData
。IO.puts
返回值爲ok
。
所以IO.inspect
在調試時能隨意打印任何數據結構是多麼的棒!
使用Label選項
最棒的是此函數可以保持返回值就是輸入,這可以在代碼的任何地方加入它,且不影響原有代碼邏輯。比如:
- IO.inspect 可以加入
label
選項,他會直接把label
對應內容打印在最前面。 - 使用String.split/3正則分割字符串。
使用Limit選項
限制打印的長度,允許輸入0-N,或者:infinity
。
Kernel.inspect/2
還有一個與IO.inspect
非常相似的函數,它就是Kernel.inspect/2
, 這個函數不會把數據打到控制檯上,它只是把參數stringify化,比如:
iex> inspect(:foo)
":foo"
iex> inspect([1, 2, 3, 4, 5], limit: 3)
"[1, 2, 3, ...]"
iex> inspect([1, 2, 3], pretty: true, width: 0)
"[1,\n 2,\n 3]"
iex> inspect("olá" <> <<0>>)
"<<111, 108, 195, 161, 0>>"
iex> inspect("olá" <> <<0>>, binaries: :as_strings)
"\"olá\\0\""
iex> inspect("olá", binaries: :as_binaries)
"<<111, 108, 195, 161>>"
iex> inspect('bar')
"'bar'"
iex> inspect([0 | 'bar'])
"[0, 98, 97, 114]"
iex> inspect(100, base: :octal)
"0o144"
iex> inspect(100, base: :hex)
"0x64"