在Elixir中打印列表会给出字符串

时间:2016-11-17 16:08:04

标签: elixir

我正在运行下面的代码,将列表中的数字加10。但是,我得到了一个字符列表。

result = Enum.map([1, 2, 3], fn x -> x + 10 end)

结果 \w\f\r

如果我从+更改为*,则代码可以正常运行。 result = Enum.map([1, 2, 3], fn x -> x + 10 end) 按预期返回[10, 20, 30]

但是,当我从10更改为32时,我也遇到类似的错误,返回' @'

知道这意味着什么以及如何解决它?感谢

2 个答案:

答案 0 :(得分:1)

在Elixir中,一个字符列表(两个单引号'like this'之间的值)只是一个数字列表。因此,当你有一个数字列表,其中所有数字都可以写成字符(在ASCII范围内)时,iex将为你打印它们。

iex(1)> 'hello'
'hello'
iex(2)> [104, 101, 108, 108, 111]
'hello'

您仍然有一个数字列表,您仍然可以对其进行其他操作,就好像它是一个数字列表,例如

iex(3)> [104, 101, 108, 108, 111] == 'hello'
true
iex(4)> Enum.map 'hello', fn x -> x * 10 end
[1040, 1010, 1080, 1080, 1110]

如果在iex中想要查看列表的数值,可以在列表中附加一个不可查看的字符,例如0,这会强制iex显示数字列表而不是char列表。

iex(5)> [104, 101, 108, 108, 111] ++ [0]
[104, 101, 108, 108, 111, 0]

您可以阅读有关字符列表here

的更多信息

答案 1 :(得分:0)

在Elixir中,char列表是一个包含代码点的列表,也可以表示为单引号字符串。

如果您的函数返回一个数字列表,其中这些数字是ASCII表中的代码点,IEx会将它们表示为单引号字符串。

iex(5)> [11,12,13] '\v\f\r'

如果其中至少有一个不是ASCII码点,它们将被表示为数字列表:

iex(22)> [11,12,127] [11, 12, 127]

Elixir(或者我认为是elrang)处理character lists and strings的方式很奇怪。