Elixir 行为介绍

行为是另一个模块可以实现的功能规范列表。它们类似于其他语言的接口。

这是一个示例行为:

defmodule Parser do
  @callback parse(String.t) :: any
  @callback extensions() :: [String.t]
end

以及实现它的模块:

defmodule JSONParser do
  @behaviour Parser

  def parse(str), do: # ... parse JSON
  def extensions, do: ["json"]
end

上面的 @behaviour 模块属性表示该模块应该定义 Parser 模块中定义的每个函数。缺少函数将导致未定义的行为函数编译错误。

模块可以具有多个 @behaviour 属性。