Erlang 如何通过变量指定位字符串的类型

Erlang 如何通过变量指定位字符串的类型,erlang,Erlang,Erlang不让我这么做: Type = bitstring. <<FirstPart:8/Type, Rest/bitstring>> = some_binary. Type=位字符串。 =一些二进制文件。 尽管它让我做到了: Size = 8. <<FirstPart:Size/bitstring, Rest/bitstring>> = some_binary. Size=8。 =一些二进制文件。 因此,在位字符串表达式中,虽然我可

Erlang不让我这么做:

Type = bitstring. 
<<FirstPart:8/Type, Rest/bitstring>> = some_binary.
Type=位字符串。
=一些二进制文件。
尽管它让我做到了:

Size = 8. 
<<FirstPart:Size/bitstring, Rest/bitstring>> = some_binary.
Size=8。
=一些二进制文件。

因此,在位字符串表达式中,虽然我可以通过变量传递大小,但它不允许我通过变量传递类型。有什么解决办法吗?

我看不出有什么特别的地方会给处理不同的“类型”编码带来条件上的不便

case StringType of
  byte_len ->
    <<Len:8, String:Len/binary>> = SomeBinary,
    String;
  word_len ->
    <<Len:32, String:Len/binary>> = SomeBinary,
    String;
  etc -> ...
end
case-StringType
字节长度->
=SomeBinary,
一串
单词\u len->
=SomeBinary,
一串
等等-->。。。
结束

您可以使用案例语句作为解决方法:

{FirstPart, Rest} = case Type of
                        {'bitstring', Len} ->
                            <<A:Len/bitstring, B/bitstring>> = Bin,
                            {A,B};
                        'integer' ->
                            <<A/integer, B/bitstring>> = Bin,
                            {A,B};
                        ...
{FirstPart,Rest}=的大小写类型
{'bitstring',Len}->
=Bin,
{A,B};
“整数”->
=Bin,
{A,B};
...

500个题为“Erlang”:o)这对我来说很有效,我已经这样做了。我只是想知道为什么他们没有为类型使用var…我的猜测是二进制表达式在编译时被编译成内部的东西。是的,二进制表达式被编译,没有类型会使它变慢。