Ricerca…


Osservazioni

Una nota sulle strutture

Invece di condividere l'implementazione del protocollo con le mappe, le strutture richiedono la propria implementazione del protocollo.

introduzione

I protocolli consentono il polimorfismo in elisir. Definire i protocolli con defprotocol :

defprotocol Log do
  def log(value, opts)
end

Implementa un protocollo 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 le suddette implementazioni, possiamo fare:

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

I protocolli consentono di inviare qualsiasi tipo di dati, purché implementino il protocollo. Questo include alcuni tipi built-in come Atom , BitString , Tuples e altri.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow