Size: a a a

2020 July 24

D

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

D

D in pro.elixir
Евгений
Полагаю, версия эрланга и эликсира тут ничего не значат. Какая версия диалайзера?
как узнать его версию? я его отдельно не ставил, он пославился вместе с elixir-ls
источник

Е

Евгений in pro.elixir
А хрен его знает :) я через диаликсир гоняю, диаликсир 1.0.0
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ты серьезно? То есть спеку ты поменял, а функцию нет?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Внутри inc поменяй nil на error и посмотри
источник

Е

Евгений in pro.elixir
Źmićer Rubinštejn
Ты серьезно? То есть спеку ты поменял, а функцию нет?
ах, лол, я и не заметил :)))))
источник

Е

Евгений in pro.elixir
думал человек просто скопипастит :)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Версию они проверяют, анекдот просто...
источник

Е

Евгений in pro.elixir
Źmićer Rubinštejn
Версию они проверяют, анекдот просто...
ну мало ли, вдруг поправили в последней :)
источник

D

D in pro.elixir
Źmićer Rubinštejn
Внутри inc поменяй nil на error и посмотри
да, ступил, так пропадает warning
источник

D

D in pro.elixir
хреново
источник

Е

Евгений in pro.elixir
D
да, ступил, так пропадает warning
И да, nil он не предполагает и его нужно писать.
источник

МБ

Максим Барулин... in pro.elixir
на сколько правильно в экто использовать prepare_changes чтобы обновить данные руками? Ситуация следующая: есть вопрос, у него есть ответы, кто-то пытается удалить вопрос. Хз почему, но экто не видит, что ответы на него тоже пропали и пытается напрямую дропнуть вопрос, ключ в бд это сделать не даёт. Насколько правильно в prepare_changes руками пройтись по изменениям и сделать всё, что нужно? Может для этого есть какой-то ещё вариант?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Максим Барулин
на сколько правильно в экто использовать prepare_changes чтобы обновить данные руками? Ситуация следующая: есть вопрос, у него есть ответы, кто-то пытается удалить вопрос. Хз почему, но экто не видит, что ответы на него тоже пропали и пытается напрямую дропнуть вопрос, ключ в бд это сделать не даёт. Насколько правильно в prepare_changes руками пройтись по изменениям и сделать всё, что нужно? Может для этого есть какой-то ещё вариант?
В базе данных надо делать on_delete: cascade в таких случаях
источник

LL

Lama Lover in pro.elixir
V
Хз.
А попробуй так и сделать
  @spec inc(nil) :: nil
 def inc(nil), do: nil
@spec inc(integer()) :: integer()
def inc(a), do: {a + 1, a + 2}

что скажет?
Так нельзя :/
источник

МБ

Максим Барулин... in pro.elixir
Źmićer Rubinštejn
В базе данных надо делать on_delete: cascade в таких случаях
так нельзя, если юзер отвечал на опрос, то удалять эти ответы нельзя
источник

МБ

Максим Барулин... in pro.elixir
поэтому единственный вариант deleted: true
источник

МБ

Максим Барулин... in pro.elixir
но вычислять дифы руками очень не хочется
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я не понимаю
источник

D

D in pro.elixir
Евгений
Диалайзер не проверяет кложи, которые реально не вызываются из кода.
извиняюсь за невнимательность, надеюсь в этот раз я нигде не накосячил)

получилось, когда попробовал флаг -Woverspecs у dializer - http://erlang.org/doc/man/dialyzer.html

defmodule Foo do
 @spec inc(a :: integer() | :error) :: integer() | :error
 def inc(:error), do: :error
 def inc(a), do: {a + 1, a + 2}
end


The success typing for 'Elixir.Foo':inc/1 implies that the function might also return 
         {number(), number()} but the specification return is
         'error' | integer()ElixirLS Dialyzer


и еще вот здесь объяснение похожей истории (последний ответ) - https://stackoverflow.com/questions/49091334/dialyzer-misses-error-with-type-specification

First a short answer, using Dialyzer's maxims:

   Dialyzer is never wrong. (recited very often by Erlang programmers)
   Dialyzer never promised to find all errors in your code. (not so famous)

Maxim number 2 is the (admittedly not very satisfying) "standard" answer to any "Why Dialyzer didn't catch this error" question.
источник