- Elixir 教程
- Elixir - 首頁
- Elixir - 概述
- Elixir - 環境
- Elixir - 基本語法
- Elixir - 資料型別
- Elixir - 變數
- Elixir - 運算子
- Elixir - 模式匹配
- Elixir - 決策制定
- Elixir - 字串
- Elixir - 字元列表
- Elixir - 列表和元組
- Elixir - 關鍵字列表
- Elixir - Map
- Elixir - 模組
- Elixir - 別名
- Elixir - 函式
- Elixir - 遞迴
- Elixir - 迴圈
- Elixir - 可列舉
- Elixir - 流
- Elixir - 結構體 (Structs)
- Elixir - 協議
- Elixir - 檔案I/O
- Elixir - 程序
- Elixir - 符號 (Sigils)
- Elixir - 列表推導式 (Comprehensions)
- Elixir - 型別規範 (Typespecs)
- Elixir - 行為 (Behaviours)
- Elixir - 錯誤處理
- Elixir - 宏
- Elixir - 庫
- Elixir 有用資源
- Elixir - 快速指南
- Elixir - 有用資源
- Elixir - 討論
Elixir - 行為 (Behaviours)
在 Elixir(和 Erlang)中,行為是一種將元件的通用部分(成為行為模組)與特定部分(成為回撥模組)分離和抽象的方法。行為提供了一種方法來:
- 定義一組必須由模組實現的函式。
- 確保模組實現該集合中的所有函式。
如果需要,您可以將行為視為 Java 等面嚮物件語言中的介面:模組必須實現的一組函式簽名。
定義行為
讓我們考慮一個示例來建立我們自己的行為,然後使用此通用行為來建立模組。我們將定義一個行為,該行為用不同的語言向人們問好和道別。
defmodule GreetBehaviour do @callback say_hello(name :: string) :: nil @callback say_bye(name :: string) :: nil end
@callback 指令用於列出採用模組需要定義的函式。它還指定引數的數量、型別和返回值。
採用行為
我們已經成功定義了一個行為。現在,我們將採用它並在多個模組中實現它。讓我們建立兩個模組,分別用英語和西班牙語實現此行為。
defmodule GreetBehaviour do
@callback say_hello(name :: string) :: nil
@callback say_bye(name :: string) :: nil
end
defmodule EnglishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hello " <> name)
def say_bye(name), do: IO.puts("Goodbye, " <> name)
end
defmodule SpanishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hola " <> name)
def say_bye(name), do: IO.puts("Adios " <> name)
end
EnglishGreet.say_hello("Ayush")
EnglishGreet.say_bye("Ayush")
SpanishGreet.say_hello("Ayush")
SpanishGreet.say_bye("Ayush")
執行上述程式時,會產生以下結果:
Hello Ayush Goodbye, Ayush Hola Ayush Adios Ayush
正如您已經看到的那樣,我們使用模組中的@behaviour指令來採用行為。我們必須為所有子模組定義行為中實現的所有函式。這大致可以認為等同於面嚮物件語言中的介面。
廣告