例外

例外 の Elixir

8個の演習

例外について

Exceptionビヘイビアは、errorsがどのように発生して表示されるかを定義します。

次の2つの任意のコールバックが含まれます。

  • message/1は、エラー構造体を読みやすいメッセージに変換します。
  • exception/1は、raise/2の2番目の引数からメッセージを作成し、メッセージを変更できるようにします。

定義されたエラーは次のとおりです。

  • 実装されているモジュールと同じ名前を持ちます。
  • 構造体を拡張したものです。
  • :messageフィールドを持ちます。
  • 意図したエラーを発生させるために、raise/1とraise/2で使うことができます。

例外を定義する

エラーモジュールから例外を定義するには、defexceptionマクロを使います。

# Defines a minimal error, with the name `MyError`
defmodule MyError do
  defexception message: "error"
end

# Defines an error with a customized exception/1 function
defmodule MyCustomizedError do
  defexception message: "custom error"

  @impl true
  def exception(value) do
    case value do
      [] ->
        %MyCustomizedError{}

      _ ->
        %MyCustomizedError{message: "Alert: " <> value}
    end
  end
end

例外を使う

定義したエラーは、組み込みのエラーと同じように、raise/1またはraise/2を使って発生させることができます。

raise MyError
# => ** (MyError) error

raise MyError, "an error occurred"
# => ** (MyError) an error occurred

raise MyCustomizedError
# => ** (MyCustomizedError) "custom error"

raise MyCustomizedError, "a very bad error occurred"
# => ** (MyCustomizedError) Alert: a very bad error occurred
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

例外を学習する

練習はロックされています

例外を練習するには、あと2個の演習のロックを解除してください