如果我有这样的管道:
"1" |> String.to_integer
如果字符串为空(不是零),我如何防范它?
"" |> String.to_integer
** (ArgumentError) argument error
:erlang.binary_to_integer("")
答案 0 :(得分:4)
一切都取决于具体情况。例如,您可以使用默认值并在私有函数中使用它。
defp convert_to_integer(my_string \\ 0) # if 0 is appropriate default value
String.to_integer(my_string)
end
当然还有更好的方式 - Integer.parse
,如果一切正常,则会返回有效元组,如果出现问题,则返回:error
。cond
只需将其与case
或defp convert_to_integer(my_string)
result = Integer.parse(my_string)
case result do
{number, _} -> number
:error -> "it didn't work" # or anything
end
end
结合使用。
map(min, L1, L2)
答案 1 :(得分:1)
尝试使用模式匹配来保护它:
def to_integer(string) when byte_size(string) == 0 do
# do_something_with_empty_string
IO.puts "empty"
end
def to_integer(string) do
# handle your case here
String.to_integer(string)
end
IEX:
iex(9)> Test.to_integer("")
empty
:ok
iex(10)> Test.to_integer("2")
2