Elixir Language
Protocoles
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