我正在试手
Enum.map
。当我将 100 添加到列表的所有元素时,我发现了这个奇怪的输出。
为什么这样输出?事实证明,当我添加 100 时我得到了一个字符串,但当我进行其他操作时工作正常。又折腾了一番,还是有这样意想不到的结果
你看到的值
'efgh'
不是一个String而是一个Charlist。
你的陈述的结果应该是
[101, 102, 103, 104]
(实际上是),但它不会那样输出。列表中的四个值映射到 ASCII 中的 e
、f
、g
和 h
,因此 iex
只打印它们的 codepoints
而不是列表。如果列表包含无效字符(例如 0 或您的情况下的 433),它将保留为一个简单列表。
来自 Elixir 的入门指南:
字符列表包含单引号之间字符的代码点(请注意,默认情况下,如果任何字符超出 ASCII 范围,IEx 只会输出代码点)。
'efgh'
和 [101, 102, 103, 104]
在 Elixir 中是相等的,为了证明您可以强制 inspect
将它们打印为列表:
[101, 102, 103, 104] == 'efgh'
#=> true
[101, 102, 103, 104] |> inspect(charlists: :as_lists)
#=> [101, 102, 103, 104]
您还可以将 IEx 配置为始终将字符列表打印为列表:
IEx.configure(inspect: [charlists: :as_lists])
这行代码可以添加到 an
.iex.exs
文件 以确保始终应用它。 (仅适用于您的项目,位于与您的.iex.exs
文件相同的目录中的名为mix.exs
的文件中,和/或作为个人偏好,在位于.iex.exs
的文件中没有现有~/.iex.exs
文件的所有项目。)