Recherche…


Remarques

Une note sur les structs

Au lieu de partager l'implémentation du protocole avec des cartes, les structures nécessitent leur propre implémentation de protocole.

introduction

Les protocoles permettent le polymorphisme dans Elixir. Définir des protocoles avec defprotocol :

defprotocol Log do
  def log(value, opts)
end

Implémenter un protocole avec 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

Avec les implémentations ci-dessus, nous pouvons faire:

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

Les protocoles vous permettent d'envoyer à n'importe quel type de données, tant qu'il implémente le protocole. Cela inclut certains types intégrés tels que Atom , BitString , Tuples et autres.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow