Elixir語言中 Protocol.derive
相關用法介紹如下。
用法:
derive(protocol, module, options \\ [])
(宏)
使用給定選項為module
派生protocol
。
如果您的實現傳遞了選項,或者您正在基於結構生成自定義代碼,您還需要實現一個定義為 __deriving__(module, struct, options)
的宏來獲取傳遞的選項。
例子
defprotocol Derivable do
def ok(arg)
end
defimpl Derivable, for: Any do
defmacro __deriving__(module, struct, options) do
quote do
defimpl Derivable, for: unquote(module) do
def ok(arg) do
{:ok, arg, unquote(Macro.escape(struct)), unquote(options)}
end
end
end
end
def ok(arg) do
{:ok, arg}
end
end
defmodule ImplStruct do
@derive [Derivable]
defstruct a: 0, b: 0
end
Derivable.ok(%ImplStruct{})
#=> {:ok, %ImplStruct{a: 0, b: 0}, %ImplStruct{a: 0, b: 0}, []}
現在可以通過 __deriving__/3
調用顯式派生:
# Explicitly derived via `__deriving__/3`
Derivable.ok(%ImplStruct{a: 1, b: 1})
#=> {:ok, %ImplStruct{a: 1, b: 1}, %ImplStruct{a: 0, b: 0}, []}
# Explicitly derived by API via `__deriving__/3`
require Protocol
Protocol.derive(Derivable, ImplStruct, :oops)
Derivable.ok(%ImplStruct{a: 1, b: 1})
#=> {:ok, %ImplStruct{a: 1, b: 1}, %ImplStruct{a: 0, b: 0}, :oops}
相關用法
- Elixir Protocol.extract_protocols用法及代碼示例
- Elixir Protocol.consolidate用法及代碼示例
- Elixir Protocol.extract_impls用法及代碼示例
- Elixir Protocol用法及代碼示例
- Elixir Process.monitor用法及代碼示例
- Elixir Process.demonitor用法及代碼示例
- Elixir Process.delete用法及代碼示例
- Elixir Process.whereis用法及代碼示例
- Elixir Process.group_leader用法及代碼示例
- Elixir Process.put用法及代碼示例
- Elixir Process.registered用法及代碼示例
- Elixir Process.register用法及代碼示例
- Elixir Process.get用法及代碼示例
- Elixir Process.exit用法及代碼示例
- Elixir Process.unregister用法及代碼示例
- Elixir Process.get_keys用法及代碼示例
- Elixir Process.sleep用法及代碼示例
- Elixir Process.send用法及代碼示例
- Elixir Process.spawn用法及代碼示例
- Elixir Process.send_after用法及代碼示例
- Elixir Process.list用法及代碼示例
- Elixir Path.basename用法及代碼示例
- Elixir Path.rootname用法及代碼示例
- Elixir Path.type用法及代碼示例
- Elixir Path.split用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Protocol.derive(protocol, module, options \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。