Size: a a a

2021 April 06

D

D in pro.elixir
а что значит прогнать мэтчинг?
источник

D

D in pro.elixir
узнать все ли элементы являются Sort?
источник

ГК

Георгий Каштанов... in pro.elixir
Да.
источник

ГК

Георгий Каштанов... in pro.elixir
Пробовал так. В моём случае получилось, что в предикат Enum.all приходят %{}, а не %Sort{}. По структуре они соответствуют %Sort{}, но являются не страктами, а мапами. Или вы имеете ввиду, что нужно Enum.map и в нём struct/2 для каждого элемента?
источник

D

D in pro.elixir
Enum.all?(sort, &match?(%Sort{}, &1))
источник

ML

Maksim Lapshin in pro.elixir
Еще можно как у нас в type_mapper на базе спек жсон валидировать
источник

AB

Alex Bubnov in pro.elixir
кстати, а dialyxir не понимает, что struct - это сабтайп map?
источник

DF

Denis Fakhrtdinov in pro.elixir
Нет, нужно написать предикат так, чтобы он возвращал true только если элемент является страктом Sort.
источник

DF

Denis Fakhrtdinov in pro.elixir
То есть предикат вида
fn
   (%Sort{}) -> true
   (_) -> false
end
источник

DF

Denis Fakhrtdinov in pro.elixir
У меня иногда из-за микса синтаксисов Э и Э крыша шуршать начинает.
источник

D

D in pro.elixir
match? делает тоже самое
источник

LL

Lama Lover in pro.elixir
Так и делай
case blah_blah_blah do
 {:ok, %{sort: %Sort{}} = result} -> result
 ...
end
источник

DF

Denis Fakhrtdinov in pro.elixir
Там список внутре.
источник

D

D in pro.elixir
Enum.all?([%Sort{}, %{}], &match?(%Sort{}, &1))  => false
Enum.all?([%Sort{}, %Sort{}], &match?(%Sort{}, &1))  => true
источник

LL

Lama Lover in pro.elixir
А, понял
источник

ГК

Георгий Каштанов... in pro.elixir
Всё-таки ему для матчинга потребуется, чтобы был именно конкретный стракт.

allAreSort = Enum.all?(
 [%{"field" => "s", "direction" => "a"}],
 &match?(%Sort{}, &1)
) # false
allAreSort2 = Enum.all?(
 [struct(%Sort{}, %{"field" => "s", "direction" => "a"})],
 &match?(%Sort{}, &1)
) # true
источник

ГК

Георгий Каштанов... in pro.elixir
Просто duck typing не пройдёт.
источник

D

D in pro.elixir
`struct(%Sort{}, %{"field" => "s", "direction" => "a"})`
эквивалентно в итоге `%Sort{field: "s", direction: "a"}`
источник

LL

Lama Lover in pro.elixir
На тайпспеки можно полагаться, но всё-таки, лучше просто принять и понять динамическую типизацию. Диалайзер для меня скорее больше похож на подсказки разработчиком, чтобы не запутаться при написании кода

Если код пишется так, что в функцию по задумке должны попадать значения одного типа, то нужно оптимистично писать так, как будто бы только он и приходит. Если придёт значение другого типа, то скорее всего что-то упадёт, а если и не упадёт, то тест это поймает. А если тест не поймает, то это заметят на стейдже, а если не заметят на стейдже, то тут и типизация не поможет

Так что нужно не бояться, а просто let it crash и мониторить логи
источник

AB

Alex Bubnov in pro.elixir
матч стракта это %{__struct__: StructName, field: ...}
ну и атомы/строки
источник