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 ответов

14 просмотров

использование типов 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
Ортодоксальный джавист должен уметь жить с непарам...

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта