存在しないファイルを読み込んだ時、: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
中々、慣れない。