我们如何解决 Elixir 中的冲突行为警告?
warning: conflicting behaviours found. function handle_info/2 is required by Raxx.Server and GenServer
例如,我需要在一个模块中同时使用GenServer
和Raxx.SimpleServer
,并且都定义了@callback
句柄信息
defmodule TestServer
use Raxx.SimpleServer
use GenServer
def handle_info(_, state), do: {:noreply, state}
end
请问最好/推荐的解决方法是什么?
最佳答案
TL;DR:您无法抑制此警告,因为您不应该交叉违规行为。 OTOH,这只是一个约定,尽管有警告,代码可能会愉快地运行。
这肯定是一个 XY Problem .首先,你应该明确地告诉编译器 handle_info/2
是一个实现:
@impl GenServer # or @impl true
def handle_info(_, state), do: {:noreply, state}
其次,如上所述的设计,即使它受到欢迎并且没有产生任何警告,也违反了SRP。 .
你可能应该做的是,有一个监督者的监督树,管理两个工作人员:一个用于 Raxx.SimpleServer
,另一个用于 GenServer
。当需要互操作时,将消息传递给各自的进程。
关于elixir - 我们如何解决 Elixir 中的冲突行为警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894391/