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

jor*_*dan 3 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")
Run Code Online (Sandbox Code Playgroud)

bla*_*bla 8

如果您只需要从字符串转换整数和布尔值,您可以这样做:

defmodule Converter do
  def convert!("true"), do: true
  def convert!("false"), do: false
  def convert!(num), do: String.to_integer(num)
end
Run Code Online (Sandbox Code Playgroud)

使用示例:

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

如果您正在处理 json,您可能需要考虑使用解析库,例如Poison