當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。