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
、 BitString
などのTuples
型が含まれます。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow