作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型?
编辑(改写):
当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(protocol)方法有多个参数时,使用哪一个来找到对应的实现?总是第一个吗?可以改变吗?
最佳答案
实现总是基于第一个参数来确定。
当您定义协议(protocol)时,将生成一个通用协议(protocol)模块。该模块中的所有 def
子句将对具体函数执行委托(delegate),根据第一个参数的类型确定要调用的函数。
Elixir 源代码中发生这种情况的地方是 here (其中第一个参数明确称为 t
)和 here (其中 t
被传递给 impl_for!
以获得转发函数调用的模块)。defimpl
将生成名称符合 defprotocol
使用的内部约定的具体模块。因此可以确保函数调用将被委托(delegate)给适当的具体模块。
关于protocols - Elixir 中的 "for"中的 "defimpl"实际上检查了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27678420/
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我是一名优秀的程序员,十分优秀!