- Elixir 教程
- Elixir - 主页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 操作员
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 弦乐
- Elixir - 角色列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 地图
- Elixir - 模块
- Elixir - 别名
- Elixir - 功能
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 流程
- 长生不老药 - 印记
- Elixir - 领悟
- Elixir - 类型规格
- Elixir - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - Behave
Elixir(和 Erlang)中的Behave是一种将组件的通用部分(成为Behave模块)与特定部分(成为回调模块)分离和抽象的方法。Behave提供了一种方法 -
- 定义一组必须由模块实现的功能。
- 确保模块实现该集中的所有功能。
如果必须的话,您可以考虑像 Java 这样的面向对象语言中的接口之类的Behave:模块必须实现的一组函数签名。
定义Behave
让我们考虑一个创建我们自己的Behave的示例,然后使用此通用Behave来创建模块。我们将定义一种用不同语言向人们打招呼和再见的Behave。
defmodule GreetBehaviour do @callback say_hello(name :: string) :: nil @callback say_bye(name :: string) :: nil end
@callback指令用于列出采用模块需要定义的函数。它还指定了编号。参数、它们的类型和它们的返回值。
采取一种Behave
我们已经成功定义了一种Behave。现在我们将在多个模块中采用和实现它。让我们创建两个用英语和西班牙语实现此Behave的模块。
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指令采用一种Behave。我们必须为所有子模块定义在Behave中实现的所有函数。这可以粗略地认为相当于OOP语言中的接口。