当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。