Size: a a a

2021 April 06

ГК

Георгий Каштанов... in pro.elixir
Тогда туда у меня попадает один элемент со значениями по умолчанию, даже если в data значения заполнены.
источник

D

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

AM

Aliaksandr Martsinov... in pro.elixir
defstruct сам по себе не задает типы и даже не подсказывает их компилятору, насколько мне известно
источник

DF

Denis Fakhrtdinov in pro.elixir
Эликсир и эрланг — это динамические языки. Не очень понятно что требуется в итоге, если не спека для диалайзера.
источник

ГК

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

AM

Aliaksandr Martsinov... in pro.elixir
думаю правильный ответ это не пытаться написать джаву на эликсире
источник

DF

Denis Fakhrtdinov in pro.elixir
Только list()
источник

D

D in pro.elixir
да, я бы может написал даже [User.Model.Sort.t] или list(User.Model.Sort.t)
источник

DF

Denis Fakhrtdinov in pro.elixir
[] — это список, не массив.
источник

D

D in pro.elixir
++
источник

ГК

Георгий Каштанов... in pro.elixir
Требуется инструмент, который позволит при прокидывании структур из функции в функцию не запутаться с тем, какие поля где есть. Статический анализ, который умеет в типизацию массивов, тоже подойдёт.
источник

DF

Denis Fakhrtdinov in pro.elixir
Тогда нужно писать тайпспеки и запускать диалайзер.
источник

ГК

Георгий Каштанов... in pro.elixir
Понял, спасибо! А вот в таких случаях рекомендуется избавиться от %UsersRequest{} и писать просто %{} = data или даже просто data?

request = case (query |> UsersRequest.validate) do
 {:error, _} -> raise "Error"
 {:ok, %UsersRequest{} = data} -> data
end
источник

D

D in pro.elixir
да, потому что объявлени полей структуры со значением по умолчанию не является объявлением типа
источник

DF

Denis Fakhrtdinov in pro.elixir
%UsersRequest{} — это матчинг на стракт
%{} — это матчинг на мэп.
Стракт — это мэп. Мэп — это не обязательно стракт.
источник

D

D in pro.elixir
я бы писал с более строгим мэтчингом %UsersRequest{}
источник

ع

عاصم بن حارث... in pro.elixir
+++ 👍
источник

ГК

Георгий Каштанов... in pro.elixir
Если потребуется из %UsersRequest{} достать список sort, а потом прогнать мэтчинг его элементов на стракт %Sort{}, то как тогда это делается? Или в элексире так не принято, и мне нужно это заворачивать в статический анализ?
источник

DF

Denis Fakhrtdinov in pro.elixir
Тут пригодится Enum.all, если я правильно помню.
источник

DF

Denis Fakhrtdinov in pro.elixir
Бежит по списку и дергает предикат.
источник