- 教程
- 概述
- 环境
- Basic 语法
- 数据类型
- 变量
- 运算符
- 模式匹配( Pattern Matching)
- 决策( Decision Making)
- Strings( Strings)
- Char Lists( Char Lists)
- 列表和元组( Lists and Tuples)
- 关键字列表( Keyword Lists)
- Maps
- 模块( Modules)
- 别名( Aliases)
- 功能( Functions)
- 递归
- 循环
- Enumerables( Enumerables)
- Streams( Streams)
- Structs( Structs)
- 协议 Protocols
- File I/O
- 进程( Processes)
- Sigils( Sigils)
- 理解( Comprehensions)
- Typespecs( Typespecs)
- 行为( Behaviours)
- 错误处理( Errors Handling)
- Macros( Macros)
- (库)Libraries
- 有用的资源
- 讨论
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- if statement
- if..else statement
- unless statement
- unless..else statement
- cond
- case
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
行为( 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指令的行为。 我们必须定义所有child模块的行为中实现的所有函数。 这可以大致被认为等同于OOP语言中的接口。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论