Elixir字符串列表转整数列表异常:为何返回'r'而非预期整数?
为什么Elixir中转换字符串列表为整数列表后返回'r'?
哈哈,这个问题其实是Elixir IEx(交互式shell)的一个「显示小陷阱」,我来给你拆解清楚~
首先要明确:你的代码逻辑完全正确,没有bug! 你看到的'r'并不是单个字符,而是整数列表[114]的特殊显示形式。
背后的原因
在Elixir(以及底层的Erlang)里,字符列表(charlist)的本质就是整数的列表。当IEx检测到一个列表里的所有整数都是可打印的ASCII字符编码时,它会自动把这个列表显示为单引号包裹的字符形式,而不是原始的整数列表。
比如你可以在IEx里直接测试:
iex> [114] 'r' iex> is_list('r') # 验证'r'其实是列表 true iex> 'r' == [114] # 两者完全等价 true
验证你的代码
咱们来一步步确认:
- 执行
["114"] |> Enum.map(&String.to_integer(&1)),实际返回的是整数列表[114],只是IEx把它显示成了'r'。 - 用
Integer.parse的那段代码:list |> Enum.map(&Integer.parse(&1)) |> Enum.map(fn {num, _} -> num end),最终得到的同样是[114],也被IEx自动转换成了字符列表形式展示。
如果想确认真实的数据,你可以把结果绑定到变量,然后检查它的内容:
iex> list = ["114"] iex> result = list |> Enum.map(&String.to_integer(&1)) 'r' iex> hd(result) # 取列表的第一个元素,得到的是整数114 114 iex> result == [114] true
总结
你写的转换代码完全没问题,只是IEx的自动显示规则给你造成了误解——它把全是可打印ASCII编码的整数列表,转换成了更直观的字符列表形式展示,但底层存储的依然是你想要的整数列表。
内容的提问来源于stack exchange,提问作者Kourosh Alinaghi
相关产品推荐
相关产品推荐

