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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。