elixir - Elixir 中的协议(protocol)和行为之间的区别

标签 elixir

行为定义回调,协议(protocol)定义没有签名的方法。实现协议(protocol)的模块应该定义所有这些方法。对于使用行为的模块也是如此。语义上的区别是什么?

我能想到的一个区别是,一个协议(protocol)只能为单一类型实现一次,因为我们可以根据我们的要求多次实现模块的行为。我很清楚何时使用什么。除了这个还有其他区别吗?

最佳答案

协议(protocol)是基于类型/数据的多态性。当我调用 Enum.each(foo, ...) ,具体枚举由foo的类型确定.

行为是一种无类型的插件机制。当我调用 GenServer.start(MyModule) ,我明确通过MyModule作为插件,通用代码来自GenServer将在需要时调用此模块。

关于elixir - Elixir 中的协议(protocol)和行为之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26215206/

相关文章:

datetime - 在 Elixir 中,如何判断给定的 NaiveDateTime (加上像 "US/Mountain"这样的时区)是否是过去的时间?

logging - 记录器不工作 Elixir

elixir - 如何通过终端将记录添加到 Ecto 存储库? (即)

operators - 这些运算符在 Elixir 中是什么意思? ~>>,<<~

elixir - 能够将操作推送到消息队列进行处理

elixir - “handle_call”超时

forms - 如何在 Phoenix 中生成 Geo 自定义类型的表单

curl - 如何使用HTTPoison在Elixir中执行DELETE?

postgresql - 将 Postgres 包装成专用的 Phoenix App

elixir - 在 Elixir 中将 map 转换为关键字列表