Size: a a a

2020 September 24

B

Bogdan in pro.elixir
Alex Bubnov
А почему?
попробовал, не получается.
источник

B

Bogdan in pro.elixir
mimemail =
     {<<"text">>, <<"html">>,
      [
       {<<"From">>, from},
       {<<"To">>, to},
       {<<"Subject">>, <<"#{content.subject}">>},
       {<<"Content-Type">>, <<"text/html; charset=utf-8">>}],
      [{<<"transfer-encoding">>, <<"base64">>}],
      content.message}
      mime = :mimemail.encode(mimemail)

   :gen_smtp_client.deliver(
     socket,
     {from, [to], mime}
   )
источник

B

Bogdan in pro.elixir
Вот так запахало.
источник

AB

Alex Bubnov in pro.elixir
как думаете, если перенести telemetry на persistent_term, станет лучше?..
мне кажется, станет - реконфигурить telemetry в рантайме нет смысла, а локи ликвидируются
источник

AB

Alex Bubnov in pro.elixir
вот только detach в случае ошибки в эту концепцию не вписывается вообще
источник

V

V in pro.elixir
Котаны, выхватываю ошибку от диалайзера.
Есть функция
@spec myfunc(String.t()) :: {:ok, value} | {:error, :reason1} | {:error, :reason2, details}
Диалайзер видит сигнатуру возврата только {:error, :reason1}.
Когда делаю
case myfunc(x) do
   {:ok, value} ->
или
   {:error, :reason2, _}
ругается.
Что делать?
источник

LL

Lama Lover in pro.elixir
V
Котаны, выхватываю ошибку от диалайзера.
Есть функция
@spec myfunc(String.t()) :: {:ok, value} | {:error, :reason1} | {:error, :reason2, details}
Диалайзер видит сигнатуру возврата только {:error, :reason1}.
Когда делаю
case myfunc(x) do
   {:ok, value} ->
или
   {:error, :reason2, _}
ругается.
Что делать?
Функция может вернуть три различных паттерна, а ты матчишь по одному или двум
источник

V

V in pro.elixir
Lama Lover
Функция может вернуть три различных паттерна, а ты матчишь по одному или двум
Во-первых, матчу по трём. Во-вторых, какая разница? Он ругается на The pattern can never match the type.
источник

V

V in pro.elixir
Версия OTP может влиять на корректность работы диалайзера?
источник

IK

Ihor Katkov in pro.elixir
так а ты матчишь {:error, :reason1}?
источник

IK

Ihor Katkov in pro.elixir
должно быть типа
case func(x) do
 {:ok, _} -> ...
 {:error, :reason1} -> ...
 {:error, :reason2, _} -> ...
end
источник

V

V in pro.elixir
да, так и матчу
источник

IK

Ihor Katkov in pro.elixir
запость тело функции и ошибку сюда
источник

V

V in pro.elixir
Удалил спеку, ошибка исчезла
источник

LL

Lama Lover in pro.elixir
V
Котаны, выхватываю ошибку от диалайзера.
Есть функция
@spec myfunc(String.t()) :: {:ok, value} | {:error, :reason1} | {:error, :reason2, details}
Диалайзер видит сигнатуру возврата только {:error, :reason1}.
Когда делаю
case myfunc(x) do
   {:ok, value} ->
или
   {:error, :reason2, _}
ругается.
Что делать?
А почему у тебя в спеке reason — атом?
источник

V

V in pro.elixir
Там было так:
есть функция со спекой
@spec myfunc(String.t()) :: {:ok, value} | {:error, :reason1} | {:error, :reason2, details}
def myfunc(arg), do ...


а когда запускал диалайзер - он ругался как-то так:
lib/app.ex:28:pattern_match
The pattern can never match the type.                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                             
Pattern:                                                                                                                                                                                                                                                                      
{:ok, _value}                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                             
Type:                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                             
 {:error, :reason1}

т.е. показывал в описании ошибки какую-то кастрированную сигнатуру
источник

V

V in pro.elixir
Lama Lover
А почему у тебя в спеке reason — атом?
Потому что я так возвращаю, и соответственно так описал в спеке
источник

V

V in pro.elixir
Вот я нашёл похожий случай https://stackoverflow.com/questions/53302431/dialyzer-is-usually-never-wrong-but-i-cant-figure-out-how-my-spec-is-incorr
только у меня ветки не мёртвые
источник

V

V in pro.elixir
По ссылке выше найденная причина - это в теле самой функции, к которой описаны спеки. Как там говорят - диалайзер крайне недружественная штука? По его описанию сложно догадаться, что дело может быть в теле функции.
источник

ML

Maksim Lapshin in pro.elixir
Коллеги, кто-нибудь генерирует на базе кода на эликсире публичную апи документацию?
источник