Как я могу указать тип битовой строки через переменную - PullRequest
2 голосов
/ 17 января 2010

Эрланг не позволяет мне сделать:

Type = bitstring. 
<<FirstPart:8/Type, Rest/bitstring>> = some_binary.

хотя это позволяет мне:

Size = 8. 
<<FirstPart:Size/bitstring, Rest/bitstring>> = some_binary.

Итак, в выражениях битовых строк, хотя я могу передавать размер через переменную, он не позволяет мне передавать тип через переменную. Есть ли решение?

Ответы [ 2 ]

3 голосов
/ 17 января 2010

В качестве обходного пути вы можете использовать инструкцию case:

{FirstPart, Rest} = case Type of
                        {'bitstring', Len} ->
                            <<A:Len/bitstring, B/bitstring>> = Bin,
                            {A,B};
                        'integer' ->
                            <<A/integer, B/bitstring>> = Bin,
                            {A,B};
                        ...
0 голосов
/ 17 января 2010

Я не вижу здесь ничего экстраординарного, что делает условное неудобным для обработки различных «типов» кодирования.

case StringType of
  byte_len ->
    <<Len:8, String:Len/binary>> = SomeBinary,
    String;
  word_len ->
    <<Len:32, String:Len/binary>> = SomeBinary,
    String;
  etc -> ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...