PG
def add_optional(query, condition) do
if condition do
select_merge(query, [x], %{optional: x.optional})
else
select_merge(query, [_x], %{optional: nil})
end
end
Size: a a a
PG
def add_optional(query, condition) do
if condition do
select_merge(query, [x], %{optional: x.optional})
else
select_merge(query, [_x], %{optional: nil})
end
end
PG
V
defprotocol Utility do
@spec type(t) :: String.t()
def type(value)
end
defimpl Utility, for: BitString do
def type(_value), do: "string"
end
defimpl Utility, for: Integer do
def type(_value), do: "integer"
end
defmodule Some do
@spec get_utility :: ??? (как указать здесь, что возвращаемое значение будет подчиняться протоколу Utility?)
def get_utility do
123
end
end
V
@spec get_utility :: ??? (как указать здесь, что возвращаемое значение будет подчиняться протоколу Utility?)
N|
defprotocol Utility do
@spec type(t) :: String.t()
def type(value)
end
defimpl Utility, for: BitString do
def type(_value), do: "string"
end
defimpl Utility, for: Integer do
def type(_value), do: "integer"
end
defmodule Some do
@spec get_utility :: ??? (как указать здесь, что возвращаемое значение будет подчиняться протоколу Utility?)
def get_utility do
123
end
end
V
N|
N|
V
LL
defprotocol Utility do
@spec type(t) :: String.t()
def type(value)
end
defimpl Utility, for: BitString do
def type(_value), do: "string"
end
defimpl Utility, for: Integer do
def type(_value), do: "integer"
end
defmodule Some do
@spec get_utility :: ??? (как указать здесь, что возвращаемое значение будет подчиняться протоколу Utility?)
def get_utility do
123
end
end
opaque
типV
N|
N|
LL
defmodule Utility do
@opaque returned :: any()
@spec type(t) :: returned()
def type(value)
end
defmodule Some do
@spec get_utility :: Utility.returned()
end
V
type
, которая уже в свою очередь возвращает String.t.@spec get_utility :: String.t
тоже некорректноN|
V
defmodule Utility do
@opaque returned :: any()
@spec type(t) :: returned()
def type(value)
end
defmodule Some do
@spec get_utility :: Utility.returned()
end
LL
type
, которая уже в свою очередь возвращает String.t.@spec get_utility :: String.t
тоже некорректноV
@spec get_utility :: Utility.t()
defprotocol автоматически объявляет тип t
для модуля.