Elixir 管道中的模式匹配
我必须解析一个xml文档,从xml节点提取一个整数 目前我有:Elixir 管道中的模式匹配,elixir,Elixir,我必须解析一个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']") |>
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
但是我在第四行得到了
未处理的运算符->
,有什么方法可以做到这一点吗?您需要将管道插入整数中。首先解析,然后插入大小写中
:
defmodule MyInteger do
def parse(string) do
string
|> Integer.parse
|> case do
{int, _} -> int
_ -> nil
end
end
end
演示:
请注意,MyInteger.parse“123abc”#=>123
,因此您可能希望将模式匹配更改为{int,“}->int
,如果您想要与Integer.parse/1
相同的行为,请确保将大小写表达式放入自己的函数中。管道表达式的可读性不应超过一行。@tkowal,即使它是最后一行?有时,就像在本例中一样,您匹配以返回某些内容(可能再次使用管道)或完全退出case do{int,}->int;->零结束
一线获胜!很好,这正是我想要做的。虽然我想说写case Integer.parse(string)do
更具可读性。管道是伟大的,但你可以过度使用它们!
iex(1)> MyInteger.parse "123"
123
iex(2)> MyInteger.parse "abc"
nil