鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全/ 關(guān)于Erlang中的behaviour

關(guān)于Erlang中的behaviour

假如在一個(gè)behaviour模塊中定義了一組callback,那么在實(shí)現(xiàn)這個(gè)behaviour的模塊中,是必須全部實(shí)現(xiàn)所有的callback呢,還是可以只實(shí)現(xiàn)部分自己需要的callback呢?

回答
編輯回答
笑忘初

Elixir中如果只實(shí)現(xiàn)Behaviour中的部分callback,就會(huì)出現(xiàn)一個(gè)警告,所以原則上是要全部實(shí)現(xiàn)的。
下面是一個(gè)示例:

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

不過(guò)這沒(méi)有問(wèn)題,因?yàn)閎ehaviour就是一個(gè)協(xié)議,定義這個(gè)類型應(yīng)該實(shí)現(xiàn)哪些函數(shù)。

2017年3月28日 02:29