在 Elixir 中将整数列表打印为字符串
Posted
技术标签:
【中文标题】在 Elixir 中将整数列表打印为字符串【英文标题】:Integer List printed as String in Elixir 【发布时间】:2017-03-12 12:25:46 【问题描述】:我正在尝试使用Enum.map
。当我将 100 添加到列表的所有元素时,我发现了这个奇怪的输出。
为什么会有这样的输出?事实证明,当我添加 100 时,我得到了一个字符串,但在我执行其他操作时工作得很好。又折腾了一些,还是得到了这样意想不到的结果。
【问题讨论】:
Elixir lists interpreted as char lists的可能重复 【参考方案1】:您看到的'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(通过~/.iex.exs
)始终检查字符列表作为整数列表,使用 IEx.configure inspect: [charlists: :as_lists]
测试中如何配置全局字符列表?以上是关于在 Elixir 中将整数列表打印为字符串的主要内容,如果未能解决你的问题,请参考以下文章