ŹR
Size: a a a
ŹR
SM
handle_cast({:start, state}, state) безусловно вызывает accept, accept безусловно вызывает loop_accept, который безусловно вызывает сам себя, в результате handle_cast для {:start, ...} вообще не возвращает свой {:noreply, []}SM
ŹR
handle_cast({:start, state}, state) безусловно вызывает accept, accept безусловно вызывает loop_accept, который безусловно вызывает сам себя, в результате handle_cast для {:start, ...} вообще не возвращает свой {:noreply, []}ŹR
ŹR
ŹR
ŹR
SM
SM
SM
DS
ŹR
ŹR
LL
./lib/{app_name}/ и называться AppName.{module name here}
Внешний вид кода:def f(x), do: ) делаются однострочными, когда возвращают одно значение или делают что-то очевидное. Практически всегда лучше выносить в do end
Нет слова deregister, есть unregister
Elixir:./lib/broadcaster.ex:33 лучше написать фильтр не через != а через паттернматчинг./lib/client.ex:9 лучше использовать handle_continue
- В ./lib/client.ex:31 неочевидно используешь пайпы. Лучше было бы если read_line возвращал {:ok, value} | {:error, reason}. То же самое в write_line
- В ./lib/client.ex генсервер слишком часто шлёт себе сообщения - это плохо. Например, ./lib/client.ex:46 не исполнится, пока не закончится serve
Сообщения, которые попадают в генсервер кладутся в его личную очередь сообщений и не вынимаются из неё пока генсервер не закончит handle
- В ./lib/telnet_chat.ex:16 вызов каста никогда не закончится и сервер не будет обрабатывать сообщения. В accept вызывается loop, которая исполняется рекурсивно./lib/telnet_chat.ex:10 лучше использовать handle_continue
- В ./lib/telnet_chat.ex вообще большая ошибка. ПереписатьSM
B
Z
LL
МБ