- 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指令来采用行为。我们必须为所有子模块定义行为中实现的所有函数。这大致可以认为等同于面向对象语言中的接口。
广告