Buscar..


Observaciones

Una nota sobre las estructuras.

En lugar de compartir la implementación del protocolo con mapas, las estructuras requieren su propia implementación del protocolo.

Introducción

Los protocolos permiten el polimorfismo en el elixir. Definir protocolos con defprotocol :

defprotocol Log do
  def log(value, opts)
end

Implementar un protocolo con defimpl :

require Logger
# User and Post are custom structs

defimpl Log, for: User do
  def log(user, _opts) do
    Logger.info "User: #{user.name}, #{user.age}"
  end
end

defimpl Log, for: Post do
  def log(user, _opts) do
    Logger.info "Post: #{post.title}, #{post.category}"
  end
end

Con las implementaciones anteriores, podemos hacer:

iex> Log.log(%User{name: "Yos", age: 23})
22:53:11.604 [info]  User: Yos, 23
iex> Log.log(%Post{title: "Protocols", category: "Protocols"})
22:53:43.604 [info]  Post: Protocols, Protocols

Los protocolos le permiten enviar a cualquier tipo de datos, siempre que implemente el protocolo. Esto incluye algunos tipos incorporadas tales como Atom , BitString , Tuples , y otros.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow