【问题标题】:Elixir parsing string to integer [duplicate]Elixir将字符串解析为整数[重复]
【发布时间】:2021-04-23 22:48:48
【问题描述】:

我尝试将字符串列表转换为整数列表。代码如下:

list = ["114"]
list |> Enum.map(&String.to_integer(&1))

但最后一行返回'r'。而String.to_integer("114") 返回114 我试过Integer.parse/1,但它也给了我'r'(它的字符代码是114):

list
|> Enum.map(&Integer.parse(&1))
|> Enum.map(fn {num, _} -> num end)

为什么?

【问题讨论】:

  • 正如预期的那样。正如单引号所指出的,这是一个字符列表,它等于您期望的整数列表。您可以根据需要对其执行操作,它只会显示为字符列表,但它只是[114]
  • 查看这个问题和答案以及答案中的链接stackoverflow.com/questions/63473722/…
  • 感谢您的回答。
  • 如果您想查看 IEx 中的数字而不是字符列表,您可以配置它们的检查方式:IEx.configure(inspect: [charlists: :as_lists])
  • 只是添加这个指南作为参考,我认为它解释得很好:elixir-lang.org/getting-started/…

标签: string integer elixir


【解决方案1】:

正如其他 cmets 所指出的,这种令人困惑的行为是 Elixir “人性化” charlists 的结果。简而言之,Elixir(出于历史原因)可以将未编码的字符串存储为整数列表(称为“charlists”)。要点是,当列表的所有成员都是 ASCII 范围内的整数(即 0-127)时,Elixir 使用每个整数的相应代码点格式化显示(例如,114 对应于 r )。

类似的解释见这个答案:Why does for x <- 3..4, do: x * 3 return '\t\f' in Elixir?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多