Elixir Language
protocollen
Zoeken…
Opmerkingen
Een opmerking over structs
In plaats van protocolimplementatie met kaarten te delen, hebben structs hun eigen protocolimplementatie nodig.
Invoering
Protocollen maken polymorfisme mogelijk in Elixir. Definieer protocollen met defprotocol
:
defprotocol Log do
def log(value, opts)
end
Implementeer een protocol met 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
Met de bovenstaande implementaties kunnen we het volgende doen:
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
Met protocollen kunt u verzenden naar elk gegevenstype, mits het protocol wordt geïmplementeerd. Dit omvat enkele ingebouwde typen zoals Atom
, BitString
, Tuples
en andere.
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow