Как мы разрешаем конфликтующие предупреждения поведения в эликсире - PullRequest
0 голосов
/ 28 апреля 2019

Как мы можем разрешить предупреждения о конфликтном поведении в эликсире?

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

Пожалуйста, какой лучший / рекомендуемый обходной путь для этого?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

TL; DR: вы не можете подавить это предупреждение, потому что вы не должны перекрестно нарушать поведение. OTOH, это всего лишь соглашение, и код, вероятно, будет работать успешно, несмотря на предупреждение.


Это, безусловно, проблема XY . Во-первых, вы должны явно указать компилятору, что handle_info/2 - это реализация:

@impl GenServer # or @impl true
def handle_info(_, state), do: {:noreply, state} 

Во-вторых, заявленный дизайн, даже если он приветствуется и не выдает никаких предупреждений, нарушает SRP .

Что вам, вероятно, следует сделать, - это дерево надзора с супервизором, управляющим двумя работниками: один для Raxx.SimpleServer, а другой для GenServer. Когда требуется взаимодействие, вы должны передать сообщение соответствующему процессу.

1 голос
/ 29 апреля 2019

use Raxx.SimpleServer автоматически установит @behaviour GenServer, поэтому ваше использование дублируется.Удалите строку @behaviour GenServer (или Rax.SimpleServer), и она исправит ваши предупреждения:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...