Elixir エラーハンドリングのパターン

2016年7月14日 Posted by PURGE

存在しないファイルを読み込んだ時、:ok は帰ってこない為、パターンマッチに失敗してエラーとなる。

iex(1)> {:ok, file} = File.read "non_exist_file.txt"
** (MatchError) no match of right hand side value: {:error, :enoent}

存在しないファイルを読み込んだ時、:error が帰ってくる為、パターンマッチに失敗しない。

iex(2)> {:error, enoent} = File.read "non_exist_file.txt"
{:error, :enoent}

普通の言語なら、下記の2つの文をif文で制御するところだが、上記の制御を振り分けるためには、case文を使用するようだ。

case File.read "non_exist_file.txt" do
    {:ok, file} -> IO.puts "OK!!"
    {:error, enoent} -> IO.puts "File not found Error!!"
end

中々、慣れない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です