如果我有一个管道是这样的:药剂:防范参数错误
"1" |> String.to_integer
我怎样才能防止它,如果字符串是空的(不为零)?
"" |> String.to_integer
** (ArgumentError) argument error
:erlang.binary_to_integer("")
如果我有一个管道是这样的:药剂:防范参数错误
"1" |> String.to_integer
我怎样才能防止它,如果字符串是空的(不为零)?
"" |> String.to_integer
** (ArgumentError) argument error
:erlang.binary_to_integer("")
一切都取决于上下文。例如,您可以使用默认值并在您的私人功能中使用它。
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
这些都很棒,非常感谢。 –
请注意,第二个片段将成功解析整数,然后是其他任何内容,例如'convert_to_integer(“123abc”)#=> 123'。 – Dogbert
尝试模式匹配警惕这一点:
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
感谢您的提示。我忘了你可以覆盖Elixir的功能。 –
'当byte_size(string)== 0'可以是'to_integer(“”)'时,to_integer(string)。 – Dogbert
在哪里使用这条管道? – TheAnh
那是那里的控制台,但它在Phoenix模块中。 –