有的時候我們的套件模組供別人使用的時候,
需要使用這個套件的目標定義特定的函式,不僅可以統一特定類型的 api
也可以確定使用這個 Behaviour 模組的模組有實現需要的 Callback 函式
這邊舉一個方便說明的 Behaviour 與實際使用這個 Behaviour 的範例
(note: Elixir 的 Behaviour 是英式拼法,不是美式的 Behavior)
制定一個有 Behaviour 的模組
因為是要求使用者定義一個函式,所以參數的型別與函式回覆的型別都需要特別指定
(型別寫法會在後面說明,這邊先知道 user 必須要是字串, message 也是字串,且預期這個函式會回覆 :ok
atom)
defmodule NoticeChannel do
@callback send_message(user :: String.t(), message :: String.t()) :: :ok
end
defmodule Line do
@behaviour NoticeChannel
def send_message(user, message) do
IO.puts("Sending line message to #{user}: #{message}")
end
end
這麼一來,假如系統有很多個傳送訊息的模組,只有使用同個 @bahaviour 都可以有統一的 api