當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Kernel.defexception用法及代碼示例


Elixir語言中 Kernel.defexception 相關用法介紹如下。

用法:

defexception(fields)
(宏)

定義異常。

異常是由實現 Exception 行為的模塊支持的結構。 Exception 行為需要實現兩個函數:

  • exception/1 - 接收給 raise/2 的參數並返回異常結構。默認實現接受合並到結構中的一組關鍵字參數或用作異常消息的字符串。

  • message/1 - 接收異常結構並且必須返回其消息。最常見的異常有一個消息字段,默認情況下由該函數訪問。但是,如果異常沒有消息字段,則必須顯式實現此函數。

由於異常是結構體,因此 defstruct/1 支持的 API 在 defexception/1 中也可用。

引發異常

引發異常的最常見方法是通過 raise/2

defmodule MyAppError do
  defexception [:message]
end

value = [:hello]

raise MyAppError,
  message: "did not get what was expected, got: #{inspect(value)}"

在許多情況下,將期望值傳遞給 raise/2 並在 Exception.exception/1 回調中生成消息會更方便:

defmodule MyAppError do
  defexception [:message]

  @impl true
  def exception(value) do
    msg = "did not get what was expected, got: #{inspect(value)}"
    %MyAppError{message: msg}
  end
end

raise MyAppError, value

上麵的示例顯示了自定義異常消息的首選策略。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.defexception(fields)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。