Size: a a a

2021 May 06

P

Pavel in pro.elixir
250+ сообщений вида “LV говно и только для Hello world”, и “Посоны, нормально все, делать можно”
источник
2021 May 07

Е

Евгений in pro.elixir
Вопрос. Есть ли возможность так задать спек, чтобы он разрешал вот такие два варианта вызова функции?
@spec foo(a, b) :: c
@spec foo(b, a) :: c

Вот такое не очень хорошо:
@spec foo(a | b, a | b) :: c
так как разрешает вызов с двумя параметрами одного типа.
источник

Е

Евгений in pro.elixir
сами функции будут с guards, так что в рантайме вывалится ошибка, но таки хотелось бы, чтобы диалайзер отследил такой косяк.
источник

LL

Lama Lover in pro.elixir
Такой возможности нет
источник

Е

Евгений in pro.elixir
Печаль.
источник

B

Bogdan in pro.elixir
Кто-нибудь имел опыт прохождения аудита для того, чтобы пользовать restricted scopes для gmail API?
источник

HR

Hara Red in pro.elixir
defmodule Demo do
 @spec foo(integer(), float()) :: float()
 @spec foo(float(), integer()) :: float()
 def foo(a, b) when is_integer(a) and is_float(b) do
   do_foo_if(a, b)
 end

 def foo(a, b) when is_float(a) and is_integer(b) do
   do_foo_fi(a, b)
 end

 @spec do_foo_if(integer(), float()) :: float()
 defp do_foo_if(a, b) do
   a + b
 end

 @spec do_foo_fi(float(), integer()) :: float()
 defp do_foo_fi(a, b) do
   a + b
 end
end

Вот на такое почему-то не ругается что есть overlaping domains.
источник

HR

Hara Red in pro.elixir
Хотя, мб, что-то не так делаю.
источник

Е

Евгений in pro.elixir
Не ругается, но и ошибки не ловит.
источник

HR

Hara Red in pro.elixir
<...>
 def bar() do
   foo(2.0, 2.0)
 end
<...>

The contract 'Elixir.Demo':foo(integer(),float()) -> float()
   ; (float(),integer()) -> float() cannot be right because the inferred return for foo(2.0,2.0) on line 4 is float()
источник

HR

Hara Red in pro.elixir
А на
  def bar() do
   foo(2.0, 2)
 end

Ошибку не выдает.
источник

HR

Hara Red in pro.elixir
Но опять же, мопед не мой, я просто написал код, и объяснить почему так пока что не могу.
источник

LL

Lama Lover in pro.elixir
Я бы подумал о том зачем это нужно, очень похоже на XY, потому что я с таким вообще никогда не сталкивался. В чём корень проблемы?
источник

Е

Евгений in pro.elixir
Да нет особой проблемы на самом деле. Просто дал функциям разные имена и все.
источник

LL

Lama Lover in pro.elixir
Во, это уже круто. Просто меня смущает, что это очевидно какой-то оператор из серии умножения вектора на число, который приводится к умножению вектора на вектор
источник

Е

Евгений in pro.elixir
Это операция вычитания над множествами хранящимися в ets и в MapSet.
источник

LL

Lama Lover in pro.elixir
А почему тогда нельзя из мапсета вычитать мапсет, например?
источник

Е

Евгений in pro.elixir
Для этого есть MapSet.difference(), а вызов моей функции с такими аргументами говорит, что что-то явно попутано.
источник

Е

Евгений in pro.elixir
В ets лежит shared множество, даже не в ets, а в mnesia
источник

Е

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