gpt4 book ai didi

list - Elixir 列表解释为 char 列表

转载 作者:行者123 更新时间:2023-12-04 13:42:56 25 4
gpt4 key购买 nike

我刚开始使用 Elixir。我正在使用 ExUnit 为我自己实现的简单 Enumerable 函数编写一些测试,而不使用标准 Enum 模块。

在我的测试中,我发现每当我引用列表 [7, 8, 9] ,一旦在标准输出中打印出来,我就会看到字符列表 '\a\b\t' .为什么会发生这种事情?

最佳答案

Elixir 有两种字符串:二进制文件(双引号)和字符列表(单引号)。后一种变体继承自 Erlang,内部表示为整数列表,映射到字符串的代码点。

当您使用 inspect 等函数时和 IO.inspect , Elixir 尝试变得聪明,并将整数列表格式化为字符串以便于阅读。但是,在某些情况下,您最终会得到一个无意义的字符串,因为您列表中的所有整数恰好都是有效的代码点。例如,字符 A 到 Z 表示为 ASCII 中的整数 65 到 90。

iex> IO.inspect [65, 66, 67]
'ABC'

如果您想打印原始列表,可以使用 charlists: :as_lists选项。如需完整的选项列表,请点击 iex并输入 h Inspect.Opts .
iex> IO.inspect [65, 66, 67], charlists: :as_lists
[65, 66, 67]

如果 Elixir < 1.4,您可以使用 char_lists: false .

顺便说一句,这不是 Elixir 向您隐藏底层构建 block 的唯一情况,二进制文件(双引号字符串)和结构也会发生这种情况。

更深层次的原因是 Elixir 和 Erlang 没有用户定义的类型,因此无法区分列表和单引号字符串,因为两者都只是列表。但是,这在其他情况下也可能是一种优势。例如,它允许我们简单地序列化 Elixir 和 Erlang 中的任何数据结构,因为它只能由语言附带的基本构建 block 构建。

关于list - Elixir 列表解释为 char 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com