169 похожих чатов

Спасибо. По типизации структур. TLDR: как типизировать поле в defstruct,

чтобы оно было Array<OtherStruct>?

Минимальный пример. Есть такая структура:

defmodule Users.Model.UsersRequest do
defstruct [
filters: nil,
sort: [],
pagination: %Users.Model.Pagination{},
]

def validate(data) do
result = validateSomehow(data)
case result do
{:error, error_body} -> {:error, error_body}
:ok -> {:ok, struct(__MODULE__, data)}
end
end
end

defmodule Users.Model.Pagination do
defstruct [
page: nil,
rowsPerPage: nil,
]
end

defmodule Users.Model.Sort do
defstruct [
field: nil,
direction: nil,
]
end

Вот в этой красоте как типизировать поле sort структуры Users.Model.UsersRequest, чтобы после struct(__MODULE__, data) его значение было типа Array<Sort>, если говорить джавовской нотацией?

9 ответов

19 просмотров

использование типов https://hexdocs.pm/elixir/typespecs.html

а вот эта штука, например, есть инструмент проверки типов https://github.com/jeremyjh/dialyxir

G-K Автор вопроса
Deconstructor
использование типов https://hexdocs.pm/elixir/type...

Правильно понимаю, что мой кейс будет чем-то таким? @type sort() :: array(Sort.t())

Правильный ответ на этот вопрос: Не нужно проверять этот тип, нужно писать тесты. Желательно с фаззингом на StreamData, если есть подозрение того что что-то может пойти не так

Lama Lover
Правильный ответ на этот вопрос: Не нужно проверят...

вообще да), зря писали эту простыню, тут валидация на структуру нафиг не нужна

Deconstructor
вообще да), зря писали эту простыню, тут валидация...

если возразить будет другая простыня, так что все равно

G-K Автор вопроса
Deconstructor
вообще да), зря писали эту простыню, тут валидация...

Ничего не зря! Очень полезно было. Для вас эта дискуссия тривиальная, а для бывшего ортодоксального джависта она очень ценная. Спасибо!

G K
Ничего не зря! Очень полезно было. Для вас эта дис...

Ортодоксальный джавист должен уметь жить с непараметризованными коллекциями.

Aleksey @cheatex
Ортодоксальный джавист должен уметь жить с непарам...

с тех пор как добавили дженерики уже выросло не одно поколение программистов

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта