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

时间:2019-04-28 20:40:11

标签: elixir warnings behavior

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

warning: conflicting behaviours found. function handle_info/2 is required by Raxx.Server and GenServer

例如,我需要同时使用GenServerRaxx.SimpleServer,并同时定义@callback handle_info

defmodule TestServer
 use Raxx.SimpleServer
 use GenServer

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

请问对此最好/推荐的解决方法是什么?

2 个答案:

答案 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)行,它将解决您的警告:)