Size: a a a

2020 July 24

ŹR

Źmićer Rubinštejn in pro.elixir
Я считаю что пофик какая типизация
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Поэтому страдания по поводу отсутствия одной из них у меня вызывают недоумение
источник

Е

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

Е

Евгений in pro.elixir
Źmićer Rubinštejn
Поэтому страдания по поводу отсутствия одной из них у меня вызывают недоумение
Статическая типизация отсеивает часть ошибок, которые в случае динамической вылезут только в рантайме.
источник

Е

Евгений in pro.elixir
Причем особое западло, когда оно вылезает в каком-нибудь относительно редком бранче. Вроде все работает, уже домой ушел и хуяк, упало.
источник

Е

Евгений in pro.elixir
что-нибудь вроде: {a, b, c} = foo()
а надо было: {a, b, c, _} = foo()
статически типизированный язык сразу тебе сообщит о косяке и без всякого диалайзера.
источник

D

D in pro.elixir
elixir-ls в vscode тоже сразу сообщает если что не так (автоматом через dialixir)
источник

Е

Евгений in pro.elixir
D
elixir-ls в vscode тоже сразу сообщает если что не так (автоматом через dialixir)
смотри выше, диалайзер лажает
источник

Е

Евгений in pro.elixir
Ладно, ничего не поделашь, пойду страдать. Хоть часть ошибок типизации он покосит. Лучше, чем ничего.
источник

D

D in pro.elixir
Евгений
Ладно, ничего не поделашь, пойду страдать. Хоть часть ошибок типизации он покосит. Лучше, чем ничего.
сейчас попробовал сделать без nil

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


тут же появился warning на спеке:
Th
e @spec for the function does not match the success typing of the function.

Function:
Foo.inc/1

Success typing:
@spec inc(nil | number()) :: nil | {number(), number()}

то есть не надо писать вариант с  ... | nil оно итак предполагает nil
источник

ŹR

Źmićer Rubinštejn in pro.elixir
D
сейчас попробовал сделать без nil

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


тут же появился warning на спеке:
Th
e @spec for the function does not match the success typing of the function.

Function:
Foo.inc/1

Success typing:
@spec inc(nil | number()) :: nil | {number(), number()}

то есть не надо писать вариант с  ... | nil оно итак предполагает nil
WAT?
источник

Е

Евгений in pro.elixir
D
сейчас попробовал сделать без nil

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


тут же появился warning на спеке:
Th
e @spec for the function does not match the success typing of the function.

Function:
Foo.inc/1

Success typing:
@spec inc(nil | number()) :: nil | {number(), number()}

то есть не надо писать вариант с  ... | nil оно итак предполагает nil
Да ничего он не предполагает, это тупо бага. nil - это атом, вместо него может быть что угодно.
defmodule Foo do
 @spec inc(a :: integer() | :error) :: integer() | :error
 def inc(:error), do: :error
 def inc(a), do: {a + 1, a + 2}
end
источник

Е

Евгений in pro.elixir
никаких ошибок не пишет
источник

D

D in pro.elixir
Евгений
Да ничего он не предполагает, это тупо бага. nil - это атом, вместо него может быть что угодно.
defmodule Foo do
 @spec inc(a :: integer() | :error) :: integer() | :error
 def inc(:error), do: :error
 def inc(a), do: {a + 1, a + 2}
end
у меня пишет
источник

D

D in pro.elixir
на вариант с :error
источник

D

D in pro.elixir
Success typing:
@spec inc(nil | number()) :: nil | {number(), number()}
источник

D

D in pro.elixir
у меня
elixir -v
Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace]

Elixir 1.10.4 (compiled with Erlang/OTP 23)
источник

Е

Евгений in pro.elixir
D
у меня пишет
вот это уже интересно, так как у меня никаких ошибок вот на это нет:
defmodule Foo do
 @spec inc(a :: integer() | :error) :: integer() | :error
 def inc(:error), do: :error
 def inc(a), do: {a + 1, a + 2}
end
источник

Е

Евгений in pro.elixir
D
у меня
elixir -v
Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace]

Elixir 1.10.4 (compiled with Erlang/OTP 23)
Полагаю, версия эрланга и эликсира тут ничего не значат. Какая версия диалайзера?
источник

D

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