Size: a a a

2020 August 24

Е

Евгений in pro.elixir
Alex Bubnov
а я не знаю, это предположение
Скорее всего неверное, потому что если тупо убрать одну опцию, например k2 оно начинает ругаться
источник

Е

Евгений in pro.elixir
То бишь на этот код уже ругается
defmodule Foo do
 @type options() :: [
         {:k1, integer()}
         | {:k3, integer()}
         | {:k4, integer()}
         | {:k5, integer()}
         | {:k6, boolean()}
       ]

 @spec foo(options()) :: options()
 def foo(a), do: a

 def bar() do
   # тут должна быть ошибка
   foo(k6: 10)
 end
end
источник

Е

Евгений in pro.elixir
Alex Bubnov
проверь с foo(k6: "asd")
А на это ругается. :)
источник

Е

Евгений in pro.elixir
Я уже не знаю что думать. :)
источник

AB

Alex Bubnov in pro.elixir
Евгений
А на это ругается. :)
а как именно ругается?
источник

Е

Евгений in pro.elixir
he function call will not succeed.

Foo.foo([{:k6, <<97, 115, 100>>}])

breaks the contract
(options()) :: options()
источник

AB

Alex Bubnov in pro.elixir
ыыыы
источник

T

Tharin in pro.elixir
стоит завести issue
источник

AB

Alex Bubnov in pro.elixir
а как из него итоговую спеку options() вытрясти?
источник

Е

Евгений in pro.elixir
Alex Bubnov
а как из него итоговую спеку options() вытрясти?
Не знаю, не разбираюсь в таких глубинах
источник

Е

Евгений in pro.elixir
Предположение со схлопыванием вроде похоже на правду, но какого хера, тогда вот тут вполне себе ругается:
defmodule Foo do
 @type options() :: [
         {:k1, integer()}
         | {:k2, boolean()}
       ]

 @spec foo(options()) :: options()
 def foo(a), do: a

 def bar() do
   foo(k2: 10)
 end
end
источник

RP

Roman Pushkov in pro.elixir
ну чисто гипотетически объединения с большим количеством представлений могут обрабатываться иначе
источник

RP

Roman Pushkov in pro.elixir
хотя опять же это было бы странно
источник

AB

Alex Bubnov in pro.elixir
так. судя по отдаваемым ошибкам, диалайзер в этом случае ничего не схлопывает, уже неплохо
источник

AB

Alex Bubnov in pro.elixir
Евгений
Скорее всего неверное, потому что если тупо убрать одну опцию, например k2 оно начинает ругаться
и вот это становится похоже на баг, зависящий от количества альтернатив элемента списка
источник

Е

Евгений in pro.elixir
Alex Bubnov
и вот это становится похоже на баг, зависящий от количества альтернатив элемента списка
И не только от кол-ва элементов, если все элементы сделать boolean() тоже ругается :)
источник

DF

Denis Fakhrtdinov in pro.elixir
Так options объявлен как проплист.
источник

DF

Denis Fakhrtdinov in pro.elixir
А, это сахарок эликсировый.
источник

Е

Евгений in pro.elixir
Denis Fakhrtdinov
А, это сахарок эликсировый.
и что это меняет?
источник

DF

Denis Fakhrtdinov in pro.elixir
Ничего.
источник