Elixir 管道中的模式匹配

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']") |>

我必须解析一个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

但是我在第四行得到了
未处理的运算符->
,有什么方法可以做到这一点吗?

您需要将管道插入
整数中。首先解析
,然后插入
大小写中

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