2010-01-17 2 views
2

Erlang не позволяет мне делать:Как я могу определить тип битовой строки через переменную

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

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

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

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

+1

пятисотый вопрос с тегами «Erlang»: о) – Zed

ответ

3

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

{FirstPart, Rest} = case Type of 
         {'bitstring', Len} -> 
          <<A:Len/bitstring, B/bitstring>> = Bin, 
          {A,B}; 
         'integer' -> 
          <<A/integer, B/bitstring>> = Bin, 
          {A,B}; 
         ... 
+0

Это работает для меня, и я уже сделал это так. Я просто удивлялся, почему они havent позволили использовать var для типа ... – Paralife

+2

My _guess_ - это то, что двоичные выражения скомпилированы во что-то внутреннее во время компиляции. – Zed

+1

прав, бинарные выражения скомпилированы и не имеют тип, делающий его медленным. – rvirding

0

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

case StringType of 
    byte_len -> 
    <<Len:8, String:Len/binary>> = SomeBinary, 
    String; 
    word_len -> 
    <<Len:32, String:Len/binary>> = SomeBinary, 
    String; 
    etc -> ... 
end 
Смежные вопросы