Elixir語言中 Inspect.Algebra
相關用法介紹如下。
一組用於創建和操作代數文檔的函數。
該模塊實現了"Strictly Pretty" (2000) by Christian Lindig 中說明的函數,並添加了一些小函數,例如對二進製節點的支持和最大限度地利用水平空間的中斷模式。
iex> Inspect.Algebra.empty()
:doc_nil
iex> "foo"
"foo"
使用此模塊中的函數,我們可以將不同的元素連接在一起並渲染它們:
iex> doc = Inspect.Algebra.concat(Inspect.Algebra.empty(), "foo")
iex> Inspect.Algebra.format(doc, 80)
["foo"]
、 nest/2
和 space/2
函數可幫助您將文檔組合成一個剛性結構。但是,當使用 line/2
和 glue/3
等函數時,文檔代數會變得有趣。膠水在兩個文檔之間插入一個中斷。組指示必須適合當前行的文檔,否則將中斷呈現為新行。讓我們用一個 break 將兩個文檔粘合在一起,將它分組,然後渲染它:group/1
iex> doc = Inspect.Algebra.glue("a", " ", "b")
iex> doc = Inspect.Algebra.group(doc)
iex> Inspect.Algebra.format(doc, 80)
["a", " ", "b"]
請注意,中斷按原樣表示,因為我們沒有達到行限製。一旦我們這樣做,它就會被換行符替換:
iex> doc = Inspect.Algebra.glue(String.duplicate("a", 20), " ", "b")
iex> doc = Inspect.Algebra.group(doc)
iex> Inspect.Algebra.format(doc, 10)
["aaaaaaaaaaaaaaaaaaaa", "\n", "b"]
該模塊使用字節大小來計算剩餘空間。如果您的文檔包含字符串,則需要將這些字符串包裝在
中,然後依賴 string/1
來預先計算文檔大小。String.length/1
最後,這個模塊還包含了 Elixir 相關的函數,有點依賴於 Elixir 格式,例如
。to_doc/2
實施細節
的實現基於Lindig 的 Strictly Pretty 論文,該論文建立在以前的漂亮打印算法之上,但針對嚴格的語言(例如 Elixir)進行了定製。論文的核心思想是使用顯式的文檔組,這些文檔組被渲染為平麵(作為空格的分隔符)或中斷(作為換行符的分隔符)。Inspect.Algebra
此實現提供兩種類型的中斷::strict
和 :flex
。當一個組不適合時,所有嚴格的中斷都被視為換行符。然而,每次出現時都會重新評估彎曲斷裂,並且可能仍會呈現平坦。有關詳細信息,請參閱
和break/1
。flex_break/1
此實現還添加了
和force_unfit/1
,它們可以更好地控製文檔擬合。next_break_fits/2
相關用法
- Elixir Inspect.Algebra.container_doc用法及代碼示例
- Elixir Inspect.Algebra.format用法及代碼示例
- Elixir Inspect.Algebra.glue用法及代碼示例
- Elixir Inspect.Algebra.string用法及代碼示例
- Elixir Inspect.Algebra.space用法及代碼示例
- Elixir Inspect.Algebra.line用法及代碼示例
- Elixir Inspect.Algebra.nest用法及代碼示例
- Elixir Inspect.Algebra.concat用法及代碼示例
- Elixir Inspect.Algebra.flex_break用法及代碼示例
- Elixir Inspect.Algebra.break用法及代碼示例
- Elixir Inspect.Algebra.next_break_fits用法及代碼示例
- Elixir Inspect.Algebra.fold_doc用法及代碼示例
- Elixir Inspect.Algebra.group用法及代碼示例
- Elixir Inspect.Algebra.empty用法及代碼示例
- Elixir Inspect.Opts.default_inspect_fun用法及代碼示例
- Elixir Inspect用法及代碼示例
- 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.Algebra。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。