我们如何解决Elixir中行为冲突的警告?
warning: conflicting behaviours found. function handle_info/2 is required by Raxx.Server and GenServer
例如,我需要同时使用GenServer
和Raxx.SimpleServer
,并同时定义@callback
handle_info
defmodule TestServer
use Raxx.SimpleServer
use GenServer
def handle_info(_, state), do: {:noreply, state}
end
请问对此最好/推荐的解决方法是什么?
答案 0 :(得分:2)
TL; DR:,您不能禁止此警告,因为您不应交叉违反行为。 OTOH,这只是一个约定,尽管有警告,代码仍可能会愉快地运行。
这肯定是XY Problem。首先,您应该明确告诉编译器handle_info/2
是实现:
@impl GenServer # or @impl true
def handle_info(_, state), do: {:noreply, state}
其次,所陈述的设计即使受到欢迎且未发出任何警告也违反了SRP。
您可能应该做的是建立一个带有主管的监督树,管理两名工作人员:一名负责Raxx.SimpleServer
,另一名负责GenServer
。需要进行互操作时,应将消息传递给相应的进程。
答案 1 :(得分:1)
use Raxx.SimpleServer
将自动设置@behaviour GenServer
,因此重复使用。删除您的@behaviour GenServer
(或Rax.SimpleServer
)行,它将解决您的警告:)