Elixir-将字符串转换为不同类型

时间:2018-07-17 22:20:41

标签: elixir

我有一个字符串化的值,它可以是整数或布尔值("20""true")。我想将值转换为它的类型,但是,当我对错误的类型进行转换时,出现运行时错误:

iex> String.to_existing_atom("20")
** (ArgumentError) argument error
    :erlang.binary_to_existing_atom("20", :utf8)

iex> String.to_integer("true")    
** (ArgumentError) argument error
    :erlang.binary_to_integer("true")

3 个答案:

答案 0 :(得分:4)

如果您只需要从字符串转换整数和布尔值,则可以执行以下操作:

defmodule Converter do
  def convert!("true"), do: true
  def convert!("false"), do: false
  def convert!(num), do: String.to_integer(num)
end

样品用量:

iex(4)> Enum.map(["20", "true", "-5", "false"], &Converter.convert!/1)
[20, true, -5, false]

如果要处理json,则可能需要考虑使用诸如Poison之类的解析库。

答案 1 :(得分:1)

如果没有这样的原子,按定义String.to_atom/1将失败。如果您为给定的字符串强行创建原子(请注意,因为原子不是经过GC编译的,因此您可以自己进行DoS),则需要使用{{1}}。

但是,如果您想解析二进制文件并从中获取价值,则可以使用:

答案 2 :(得分:-1)

看看WannabeBool库。不是示例的解决方案,但对于将字符串转换为布尔值很有用。

WannabeBool.to_boolean("true")
true

WannabeBool.to_boolean("false")
false