如果我有一個管道是這樣的:藥劑:防範參數錯誤
"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模塊中。 –