关于Erlang中的behaviour

windshear
  • 19

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

回复
阅读 2.2k
1 个回答

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就是一个协议,定义这个类型应该实现哪些函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏