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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。