Elixir:防止争论错误

时间:2016-08-02 05:28:06

标签: elixir phoenix-framework

如果我有这样的管道:

"1" |> String.to_integer

如果字符串为空(不是零),我如何防范它?

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

2 个答案:

答案 0 :(得分:4)

一切都取决于具体情况。例如,您可以使用默认值并在私有函数中使用它。

defp convert_to_integer(my_string \\ 0) # if 0 is appropriate default value
  String.to_integer(my_string)
end

当然还有更好的方式 - Integer.parse,如果一切正常,则会返回有效元组,如果出现问题,则返回:errorcond只需将其与casedefp 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
相关问题