2016-04-23 9 views
3

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 ->を取得4行目、これを行う方法はありますか?

答えて

17

あなたが最初にしてcaseInteger.parseにパイプする必要があります。

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と同じ動作が必要です。

+2

ケース式を必ず専用の関数に入れてください。パイプ式は、読みやすくするために1行を超えてはいけません。 – tkowal

+1

@tkowal最後の行であっても?時にはこのような場合は、何かを返すか(そしてもう一度パイプする)か、完全に終了するか – alex88

関連する問題