我有一个字符串化的值,它可以是整数或布尔值("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")
答案 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