在 Elixir 中打印为字符串的整数列表

问题描述 投票:0回答:1

我正在试手

Enum.map
。当我将 100 添加到列表的所有元素时,我发现了这个奇怪的输出。

为什么这样输出?事实证明,当我添加 100 时我得到了一个字符串,但当我进行其他操作时工作正常。又折腾了一番,还是有这样意想不到的结果

elixir
1个回答
23
投票

你看到的值

'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
文件的所有项目。)

© www.soinside.com 2019 - 2024. All rights reserved.