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

10-15 20:45