当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Kernel.defoverridable用法及代码示例


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-lang.org大神的英文原创作品 Kernel.defoverridable(keywords_or_behaviour)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。