我必须解析一个 xml 文档,从一个 xml 节点中提取一个整数。
目前我有:
try do
Floki.find(node, "stat[type='jersey_num']")
|> Floki.text
|> Integer.parse
|> elem(0)
rescue
e -> nil
end
这工作正常,但我不喜欢必须拯救一切,我想做这样的事情:
Floki.find(node, "stat[type='jersey_num']")
|> Floki.text
|> case Integer.parse do
{ int, _binary } -> int
_ -> nil
end
但我在第四行得到
unhandled operator ->
,有没有办法做到这一点? 最佳答案
您需要先通过管道输入 Integer.parse
,然后再输入 case
:
defmodule MyInteger do
def parse(string) do
string
|> Integer.parse
|> case do
{int, _} -> int
_ -> nil
end
end
end
演示:
iex(1)> MyInteger.parse "123"
123
iex(2)> MyInteger.parse "abc"
nil
请注意
MyInteger.parse "123abc" #=> 123
,因此如果您想要与 {int, ""} -> int
相同的行为,您可能希望将模式匹配更改为 Integer.parse/1
。关于elixir - 管道中的模式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36807608/