Edit (paraphrase):
When the protocol method has only one parameter, find the implementation according to the type of this parameter (direct or arbitrary). When the protocol method has multiple parameters, which One to find the corresponding implementation? Is it always the first one? Can it be changed?
Definition When the agreement is reached, a general protocol module will be generated. All def clauses in this module will perform the assignment of specific functions, and determine the function to be called according to the type of the first parameter.
The Elixir that this happens The location in the source is here (where the first parameter is explicitly called t) and here (where t is passed to impl_for! to obtain the module for forwarding function calls).
defimpl will generate specific modules, Its name conforms to the internal convention used by defprotocol. Therefore, make sure to delegate the function call to the appropriate concrete module.
Does “for” always check every function defined in the protocol What is the type of the first parameter in?
Edit (paraphrase):
When the protocol method has only one parameter, find the implementation according to the type of this parameter (direct or arbitrary). When the protocol method has multiple parameters, which One to find the corresponding implementation? Is it always the first one? Can it be changed?
Always determine the implementation based on the first parameter.
When the protocol is defined, a general protocol module will be generated. In this module All def clauses of the def clause will perform the assignment of specific functions, and determine the function to be called according to the type of the first parameter.
The location in the Elixir source where this happens is here (where the first parameter Explicitly referred to as t) and here (where t is passed to impl_for! to obtain the module that forwards the function call).
defimpl will generate a specific module whose name conforms to the internal convention used by defprotocol. Therefore, make sure Delegate function calls to the appropriate concrete modules.