Size: a a a

2019 October 28

ML

Maksim Lapshin in ErlangRus
в таком виде мне не нравится, потому что имплицитно подставляется имя переменной, глобальная такая получается
источник

ML

Maksim Lapshin in ErlangRus
а вот убрать в макрос имя ключа мапы — хорошая тема
источник

AB

Alexander Bogosyan in ErlangRus
Это как?
источник

ML

Maksim Lapshin in ErlangRus
Map#{?WELL_KNOWN_KEY_NAME => Value}
источник

ML

Maksim Lapshin in ErlangRus
получается такая дешевая иммитация  структуры вплане того, что поменяешь что-то и компилятор поможет
источник

SP

Sergey Prokhorov in ErlangRus
Maksim Lapshin
Map#{?WELL_KNOWN_KEY_NAME => Value}
я лично стараюсь макросы по минимуму использовать; но у нас в команде многие любят делать что-то в таком стиле чтоб не опечататься в имени ключа
источник

AB

Alexander Bogosyan in ErlangRus
Maksim Lapshin
получается такая дешевая иммитация  структуры вплане того, что поменяешь что-то и компилятор поможет
Мне кажется если определен тип то dialyzer поможет
источник

SP

Sergey Prokhorov in ErlangRus
Alexander Bogosyan
Мне кажется если определен тип то dialyzer поможет
ну не совсем...
источник

AB

Alexander Bogosyan in ErlangRus
Если все поля как required определены он должен ругнуться если перепутал ключ же
источник

SP

Sergey Prokhorov in ErlangRus
но с другой стороны, если нужен map с фиксированными ключами - почему не взять рекорд..
источник

AB

Alexander Bogosyan in ErlangRus
Рекорды не расшарить нормально.. только через hrl
источник

AB

Alexander Bogosyan in ErlangRus
Жаль что в эрланг до сих пор не завезли нормальных структур, вроде даже предложение оформленное есть давно
источник

SP

Sergey Prokhorov in ErlangRus
Alexander Bogosyan
Если все поля как required определены он должен ругнуться если перепутал ключ же
разве? типа тут ругнётся:
-type my_t() :: #{a := boolean(), b := boolean()}.

main() ->
   f(#{c => wasd}).

-spec f(my_t()) -> ok.
f(..) -> .. .
источник

AB

Alexander Bogosyan in ErlangRus
Должен ругнуться
источник

AB

Alexander Bogosyan in ErlangRus
Другое дело что на extra поля не ругается и наследовать описания типов нельзя вроде
источник

PK

Petr Kozorezov in ErlangRus
Alexander Bogosyan
А вот у нас народ любит макросить например так : -define(s, State#state). Или  -define(d, State#state.data). Типа чтобы было меньше писать при доступе к полям record в каком нибудь genserver, мне это не очень нравится, хочу узнать среди тру-эрлангистов такое норм?
Вот так, имхо, довольно удобно и наглядно получается. Но это не очень часто встречается.
https://github.com/petrkozorezov/raft_server/blob/master/src/raft_server.erl#L323
источник

SP

Sergey Prokhorov in ErlangRus
Alexander Bogosyan
Должен ругнуться
а, ну логично. Но все поля обязательные - это далеко не всегда подходит
источник

AB

Alexander Bogosyan in ErlangRus
Так там можно было на функциях сделать все
источник

PK

Petr Kozorezov in ErlangRus
Alexander Bogosyan
Так там можно было на функциях сделать все
В гардах?
источник

AB

Alexander Bogosyan in ErlangRus
Sergey Prokhorov
а, ну логично. Но все поля обязательные - это далеко не всегда подходит
Да не всегда, можно извращаться с #{ value := type() | undefined}, но в целом печаль
источник