Я пытаюсь создать typepec, представляющий двоичный пакет с фиксированной длиной.Поэтому использование цепочки битов с фиксированными N байтами (скажем, например, 25) казалось правильной идеей.
В документации по типам спецификаций Elixir указано следующее:
## Bitstrings
| <<>> # empty bitstring
| <<_::size>> # size is 0 or a positive integer
| <<_::_*unit>> # unit is an integer from 1 to 256
| <<_::size, _::_*unit>>
Отя бы предположил, что вы можете использовать @spec my_type :: <_ :: 25, _ :: _ * 8 >>
@type my_type :: <<_::25, _::_*8>>
@spec my_type_test() :: my_type
def my_type_test() do
# 25 byte bitstring with start-of-frame byte
<< 0xA5::size(8) , 0::size(24)-unit(8) >>
end
Но Dialyzer возвращается со следующим:
[ElixirLS Dialyzer] Invalid type specification for function
'TestModule':my_type_test/0. The success typing
is () -> <<_:200>>
А?Но они обе цепочки битов, а длина битов одинакова!
Кто-нибудь знает, почему Dialyzer это не нравится?