Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何在不引起警告的情况下提供函数的默认实现?_Elixir - Fatal编程技术网

Elixir 如何在不引起警告的情况下提供函数的默认实现?

Elixir 如何在不引起警告的情况下提供函数的默认实现?,elixir,Elixir,我想提供一个LibraryModule,如下所示: defmodule ClientModule do use LibraryModule end ClientModule.do_something # should work 我希望LibraryModule提供do\u something/0的默认实现,只需在ClientModule中定义即可覆盖该实现。然而,当我现在这样做时,我得到一个编译器警告:“这个子句不能匹配,因为在X行的前一个子句总是匹配的” 好像是GenServer做的,

我想提供一个
LibraryModule
,如下所示:

defmodule ClientModule do
  use LibraryModule
end

ClientModule.do_something # should work
我希望
LibraryModule
提供
do\u something/0
的默认实现,只需在
ClientModule
中定义即可覆盖该实现。然而,当我现在这样做时,我得到一个编译器警告:“这个子句不能匹配,因为在X行的前一个子句总是匹配的”

好像是
GenServer
做的,但我不知道怎么做。

使用
deforridable
使用

高度简化的代码段:

  defmacro __using__(_) do
    quote do
      def init(args) do
        {:ok, args}
      end

      defoverridable [init: 1]
    end
  end
使用可除雾的

使用

高度简化的代码段:

  defmacro __using__(_) do
    quote do
      def init(args) do
        {:ok, args}
      end

      defoverridable [init: 1]
    end
  end

特别针对您的情况,类似于:

图书馆模块 客户端模块 iex> 使用库模块
将使用宏调用
\u\u\u\u\u\u\u/1
宏,然后引用的代码部分被注入到
客户端模块中
,因此
ClientModule
获取
do\u something/0
回调函数的默认实现

使用
宏的
\uu在编写库时非常有用

新客户端模块 iex
特别针对您的情况,类似于:

图书馆模块 客户端模块 iex> 使用库模块
将使用宏调用
\u\u\u\u\u\u\u/1
宏,然后引用的代码部分被注入到
客户端模块中
,因此
ClientModule
获取
do\u something/0
回调函数的默认实现

使用
宏的
\uu在编写库时非常有用

新客户端模块 iex
在有人问:是的,我问了,同时回答了这个问题。并且有一个内置的复选框来做这件事。在回答之前没有看到评论!在有人问:是的,我问了,同时回答了这个问题。并且有一个内置的复选框来做这件事。在回答之前没有看到评论!可从哪个版本获得?可从哪个版本获得?
defmodule ClientModule do
  use LibraryModule
end
ClientModule.do_something()
# "Didn't do much but still"
defmodule NewClientModule do
  use LibraryModule

  def do_something(), do: "Something else"
end
NewClientModule.do_something()
# "Something else"