Elixir語言中 Inspect
相關用法介紹如下。
協議將 Elixir 數據結構轉換為代數文檔。Inspect
本文檔涉及為您自己的數據結構實現
協議。要了解有關使用檢查的更多信息,請參閱 Inspect
和 Kernel.inspect/2
。IO.inspect/2
函數接收要檢查的實體,然後是檢查選項,由結構 inspect/2
表示。代數文檔的構建是使用 Inspect.Opts
完成的。Inspect.Algebra
例子
很多時候,檢查結構可以在現有實體的函數中實現。例如,這裏是
的 MapSet
實現:inspect/2
defimpl Inspect, for: MapSet do
import Inspect.Algebra
def inspect(map_set, opts) do
concat(["#MapSet<", to_doc(MapSet.to_list(map_set), opts), ">"])
end
end
函數來自concat/1
,它將代數文檔連接在一起。在上麵的示例中,它連接字符串 Inspect.Algebra
"#MapSet<"
、
返回的文檔和最終字符串 Inspect.Algebra.to_doc/2
">"
。我們為模塊名稱添加前綴#
以表示檢查演示實際上不是有效的 Elixir 語法。
最後,音符字符串本身是有效的代數文檔,在打印時保持格式不變。這意味著您的
實現可能隻是返回一個字符串,盡管這將沒有任何pretty-printing。Inspect
錯誤處理
如果在檢查您的結構時出現錯誤,Elixir 將引發
錯誤並自動回退到打印結構的原始表示。ArgumentError
但是,您可以通過直接調用
實現來訪問底層錯誤。例如,要測試上麵的Inspect
,您可以調用它:Inspect.MapSet
Inspect.MapSet.inspect(MapSet.new(), %Inspect.Opts{})
導出
協議可以派生以隱藏結構中的某些字段,因此它們不會出現在日誌、檢查和類似內容中。這對於包含私人信息的字段特別有用。Inspect
選項 :only
和 :except
可以與 @derive
一起使用,以指定哪些字段應該和不應該出現在代數文檔中:
defmodule User do
@derive {Inspect, only: [:id, :name]}
defstruct [:id, :name, :address]
end
inspect(%User{id: 1, name: "Homer", address: "742 Evergreen Terrace"})
#=> #User<id: 1, name: "Homer", ...>
相關用法
- Elixir Inspect.Algebra.container_doc用法及代碼示例
- Elixir Inspect.Algebra.format用法及代碼示例
- Elixir Inspect.Algebra.glue用法及代碼示例
- Elixir Inspect.Algebra.string用法及代碼示例
- Elixir Inspect.Algebra.space用法及代碼示例
- Elixir Inspect.Algebra用法及代碼示例
- Elixir Inspect.Algebra.line用法及代碼示例
- Elixir Inspect.Algebra.nest用法及代碼示例
- Elixir Inspect.Algebra.concat用法及代碼示例
- Elixir Inspect.Algebra.flex_break用法及代碼示例
- Elixir Inspect.Opts.default_inspect_fun用法及代碼示例
- Elixir Inspect.Algebra.break用法及代碼示例
- Elixir Inspect.Algebra.next_break_fits用法及代碼示例
- Elixir Inspect.Algebra.fold_doc用法及代碼示例
- Elixir Inspect.Algebra.group用法及代碼示例
- Elixir Inspect.Algebra.empty用法及代碼示例
- Elixir Integer.pow用法及代碼示例
- Elixir Integer.undigits用法及代碼示例
- Elixir Integer.floor_div用法及代碼示例
- Elixir Integer.extended_gcd用法及代碼示例
- Elixir Integer.to_charlist用法及代碼示例
- Elixir Integer.parse用法及代碼示例
- Elixir Integer.mod用法及代碼示例
- Elixir Integer.is_even用法及代碼示例
- Elixir Integer.to_string用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Inspect。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。