【发布时间】:2017-03-12 12:25:46
【问题描述】:
我正在尝试使用Enum.map。当我将 100 添加到列表的所有元素时,我发现了这个奇怪的输出。
为什么会有这样的输出?事实证明,当我添加 100 时,我得到了一个字符串,但在我执行其他操作时工作得很好。又折腾了一些,还是得到了这样意想不到的结果。
【问题讨论】:
标签: elixir
我正在尝试使用Enum.map。当我将 100 添加到列表的所有元素时,我发现了这个奇怪的输出。
为什么会有这样的输出?事实证明,当我添加 100 时,我得到了一个字符串,但在我执行其他操作时工作得很好。又折腾了一些,还是得到了这样意想不到的结果。
【问题讨论】:
标签: elixir
您看到的'efgh' 的值不是字符串,而是Charlist。
您的语句的结果应该是[101, 102, 103, 104](实际上是),但它不会以这种方式输出。列表中的四个值以 ASCII 格式映射到 e、f、g 和 h,因此 iex 只打印它们的 codepoints 而不是列表。如果列表包含无效字符(例如 0 或 433,就像您的情况一样),它会将其保留为简单列表。
来自 Elixir 的Getting Started guide:
一个字符列表包含单引号之间的字符的代码点(请注意,默认情况下,IEx 只会在任何字符超出 ASCII 范围时输出代码点)。
'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])
【讨论】:
~/.iex.exs)始终检查字符列表作为整数列表,使用 IEx.configure inspect: [charlists: :as_lists]