E3.IO.inspect萬金油調試利器

IO.inspect/2可以把調試信息直接打印到控制檯上,簡單易用,是不可或缺的調試好幫手。

基本使用

它可以打印任何的數據類型,並且可以定製protocol來打印自定義的數據。

E3_0

對比IO.puts,它能直接打印的數據類型就少得多了,比如:基本的數據類型,原子,字符串,IODataIO.puts返回值爲ok

E3_2

所以IO.inspect調試時能隨意打印任何數據結構是多麼的棒!

使用Label選項

最棒的是此函數可以保持返回值就是輸入,這可以在代碼的任何地方加入它,且不影響原有代碼邏輯。比如:

E3_3
  1. IO.inspect 可以加入label選項,他會直接把label對應內容打印在最前面。
  2. 使用String.split/3正則分割字符串。

使用Limit選項

限制打印的長度,允許輸入0-N,或者:infinity

E3_5

Kernel.inspect/2

還有一個與IO.inspect非常相似的函數,它就是Kernel.inspect/2, 這個函數不會把數據打到控制檯上,它只是把參數stringify化,比如:
E3_4

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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章