关于Erlang中的behaviour

windshear
  • 19

假如在一个behaviour模块中定义了一组callback,那么在实现这个behaviour的模块中,是必须全部实现所有的callback呢,还是可以只实现部分自己需要的callback呢?

回复
阅读 2.2k
1 个回答
bencode
  • 105

Elixir中如果只实现Behaviour中的部分callback,就会出现一个警告,所以原则上是要全部实现的。
下面是一个示例:

defmodule Parser do
  @callback parse(String.t) :: {:ok, term} | {:error, String.t}
  @callback ext() :: String.t
end

defmodule JSONParser do
  @behaviour Parser

  def parse(tpl) do
    {:ok, %{}}
  end
end
warning: undefined behaviour function ext/0 (for behaviour Parser)
  lib/a.ex:7

不过这没有问题,因为behaviour就是一个协议,定义这个类型应该实现哪些函数。

宣传栏