Elixir Language
протоколы
Поиск…
замечания
Замечание о структурах
Вместо совместного использования протокола с картами, структуры требуют собственной реализации протокола.
Вступление
Протоколы позволяют полиморфизм в Эликсире. Определение протоколов с defprotocol
:
defprotocol Log do
def log(value, opts)
end
Внедрить протокол с 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
С приведенными выше реализациями мы можем сделать:
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
Протоколы позволяют отправлять любой тип данных, если он реализует протокол. Это включает в себя несколько встроенных типов , таких как Atom
, BitString
, Tuples
и другие.
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow