Size: a a a

2020 September 01

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
В erlang это хороший тон, задавать обрабатываемые gen_server, например, сообщения, в такой форме.
В таком случае
gen_server:call(Pid, {message, Arg1, Arg2}) превращается в
gen_server:call(Pid, ?message(Arg1, Arg2)).
В elixir хороший тон оборачивать все вызовы к gen в функции
Типа
def count_average(server, arg, timeout \\ 5000) do
 GenServer.call(server, {:count_average, arg}, timeout)
end
источник

DF

Denis Fakhrtdinov in pro.elixir
Это и в erlang так, одно другому не мешает.
источник

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
Полагаю, что-то вроде этого?
defmacro foo(a,b,c) do 
 quote do: {:foo, unquote(a), unquote(b), unquote(c)}
end
Если ты хочешь ещё писать что-то вроде
foo(a, b, c) = received_message

То лучше всё-таки через макрос как ты указал
источник

DF

Denis Fakhrtdinov in pro.elixir
Я хочу матчить это в голове какого-нибудь handle_call.
источник

DF

Denis Fakhrtdinov in pro.elixir
Да, в голове можно пользовать только макросы.
источник

ev

eugene vikulov in pro.elixir
всё, вопрос снимается, послушал интерфейс wireshark'ом - вопреки спецификации трафик идёт не широковещательный адрес определяемый адресом интерфейса, а на 255.255.255.255
источник

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
Я хочу матчить это в голове какого-нибудь handle_call.
Я люблю макросы, но всё-таки я сторонник явного кода.
И писать foo(a, b, c) вместо {:foo, a, b, c} — получается неявно, да и не сильно сокращает количество кода. Поэтому я бы такой макрос не писал бы
источник

DF

Denis Fakhrtdinov in pro.elixir
Если у тебя сложный ген_сервер, то при изменении арити сообщения ты можешь пропустить что-нибудь, и всё у тебя скомпилируется и будет работать. Только неправильно.
источник

DF

Denis Fakhrtdinov in pro.elixir
В случае с макросом тебе компилятор ругнется, что арити макроса неверное.
источник

LL

Lama Lover in pro.elixir
eugene vikulov
всё, вопрос снимается, послушал интерфейс wireshark'ом - вопреки спецификации трафик идёт не широковещательный адрес определяемый адресом интерфейса, а на 255.255.255.255
Это как это? Можно настроить как-то чтобы бродкаст шёл не на 255.255.255.255 ?
источник

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
В случае с макросом тебе компилятор ругнется, что арити макроса неверное.
В этом есть доля правды...
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Это как это? Можно настроить как-то чтобы бродкаст шёл не на 255.255.255.255 ?
нет, это невозможно. это софт не мной писанный. имеем то что имеем
источник

DF

Denis Fakhrtdinov in pro.elixir
Просто в эрланге этот макрос не выглядит таким громоздким. И синтаксис явно тебе показывает, что это не вызов функции, а именно макрос.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Denis Fakhrtdinov
В erlang это хороший тон, задавать обрабатываемые gen_server, например, сообщения, в такой форме.
В таком случае
gen_server:call(Pid, {message, Arg1, Arg2}) превращается в
gen_server:call(Pid, ?message(Arg1, Arg2)).
Первый раз слышу. Может ты путаешь хороший тон с плохим тоном, принятым у вас в компании?
источник

DF

Denis Fakhrtdinov in pro.elixir
Может ты просто не слышал о хорошем тоне?
источник

LL

Lama Lover in pro.elixir
Lama Lover
В этом есть доля правды...
Вроде диалайзер будет ругаться что какой-то кейс не сматчится. Проверка размера туппла в компайле — дело системы типов диалайзера
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Denis Fakhrtdinov
Может ты просто не слышал о хорошем тоне?
Предлагаю тебе самостоятельно посмотреть репозитории rabbitmq, cowboy, riak ии привести мне пример такого “хорошего тона”
источник

DF

Denis Fakhrtdinov in pro.elixir
Два примера из трех — лютый говнокод.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну да, ну да… Они - говнокод, а ты - самый умный
источник

DF

Denis Fakhrtdinov in pro.elixir
Ну тебе это любой опытный эрлангер скажет.
источник