Elixir語言中 Kernel.defoverridable
相關用法介紹如下。
用法:
defoverridable(keywords_or_behaviour)
(宏)
使當前模塊中的給定定義可覆蓋。
如果用戶定義了具有相同名稱和數量的新函數或宏,則丟棄可覆蓋的函數或宏。否則,使用原始定義。
被覆蓋的定義可能具有與原始定義不同的可見性:公共函數可以被私有函數覆蓋,反之亦然。
宏不能作為函數被覆蓋,反之亦然。
示例
defmodule DefaultMod do
defmacro __using__(_opts) do
quote do
def test(x, y) do
x + y
end
defoverridable test: 2
end
end
end
defmodule InheritMod do
use DefaultMod
def test(x, y) do
x * y + super(x, y)
end
end
如上例所示,super
可用於調用默認實現。
如果已定義@behaviour
,則還可以使用模塊作為參數調用defoverridable
。調用 defoverridable
的所有實現的回調都將被標記為可覆蓋。
示例
defmodule Behaviour do
@callback foo :: any
end
defmodule DefaultMod do
defmacro __using__(_opts) do
quote do
@behaviour Behaviour
def foo do
"Override me"
end
defoverridable Behaviour
end
end
end
defmodule InheritMod do
use DefaultMod
def foo do
"Overridden"
end
end
相關用法
- Elixir Kernel.defexception用法及代碼示例
- Elixir Kernel.defmodule用法及代碼示例
- Elixir Kernel.defmacro用法及代碼示例
- Elixir Kernel.defdelegate用法及代碼示例
- Elixir Kernel.defguard用法及代碼示例
- Elixir Kernel.defstruct用法及代碼示例
- Elixir Kernel.defp用法及代碼示例
- Elixir Kernel.def用法及代碼示例
- Elixir Kernel.destructure用法及代碼示例
- Elixir Kernel.div用法及代碼示例
- Elixir Kernel.SpecialForms.case用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
- Elixir Kernel.tl用法及代碼示例
- Elixir Kernel.left - right用法及代碼示例
- Elixir Kernel.tuple_size用法及代碼示例
- Elixir Kernel.to_charlist用法及代碼示例
- Elixir Kernel.base ** exponent用法及代碼示例
- Elixir Kernel.left !== right用法及代碼示例
- Elixir Kernel.if用法及代碼示例
- Elixir Kernel.spawn_monitor用法及代碼示例
- Elixir Kernel.to_string用法及代碼示例
- Elixir Kernel.length用法及代碼示例
- Elixir Kernel.first..last用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.defoverridable(keywords_or_behaviour)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。