Ź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
МБ