我们如何解决Elixir中的冲突行为警告

我们如何解决Elixir中的冲突行为警告,elixir,warnings,behavior,Elixir,Warnings,Behavior,我们如何解决Elixir中的冲突行为警告 warning: conflicting behaviours found. function handle_info/2 is required by Raxx.Server and GenServer 例如,我需要在一个modeule中同时使用GenServer和Raxx.SimpleServer,并定义@回调句柄信息 defmodule TestServer use Raxx.SimpleServer use GenServer def

我们如何解决Elixir中的冲突行为警告

warning: conflicting behaviours found. function handle_info/2 is required by Raxx.Server and GenServer
例如,我需要在一个modeule中同时使用
GenServer
Raxx.SimpleServer
,并定义
@回调
句柄信息

defmodule TestServer
 use Raxx.SimpleServer
 use GenServer

 def handle_info(_, state), do: {:noreply, state}    
end

请确定最佳/推荐的解决方法是什么?

使用Raxx。SimpleServer
将自动设置
@behavior GenServer
,因此您的使用是重复的。删除您的
@behavior GenServer
(或
Rax.SimpleServer
)行,它将修复您的警告:)

TL;DR:您无法抑制此警告,因为您不应该交叉违反行为。OTOH,这只是一个约定,尽管有警告,代码可能会很高兴地运行


这肯定是一个错误。首先,您应该明确地告诉编译器,
handle\u info/2
是一个实现:

@impl GenServer # or @impl true
def handle_info(_, state), do: {:noreply, state} 
第二,所述设计即使受到欢迎且未产生任何警告,也违反了规定


您可能应该做的是,创建一个包含一个主管的监督树,管理两个工作人员:一个用于
Raxx.SimpleServer
,另一个用于
GenServer
。当需要互操作时,您应该将消息传递给相应的流程。

这没有多大帮助。我最终不得不分为两个模块