我正在运行下面的代码,将列表中的数字加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时,我也遇到类似的错误,返回' @'
知道这意味着什么以及如何解决它?感谢
答案 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的方式很奇怪。