gpt4 book ai didi

protocols - Elixir 中的 "for"中的 "defimpl"实际上检查了什么?

转载 作者:行者123 更新时间:2023-12-04 17:47:48 30 4
gpt4 key购买 nike

“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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com