管道

时间:2016-04-23 06:44:47

标签: 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']")
  |> Floki.text
  |> case Integer.parse do
    { int, _binary } -> int
    _                -> nil
  end

但我在第四行得到unhandled operator ->,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:25)

您需要先导入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