Erlang - 为什么我在模式匹配二进制文件时不能使用值的size()?

时间:2015-10-29 10:12:47

标签: erlang

分配值

A = <<"hell">>

我有两个代码片段应该执行相同的操作,

<<A:size(A)/binary, Rest/binary>> = <<"hello">>

以上原因失败的原因是:语法错误:'('

然后我将大小(A)的值赋给B,

B = size(A)

然后以下代码段工作,

<<A:B/binary, Rest/binary>> = <<"hello">>

为什么不首先工作?

1 个答案:

答案 0 :(得分:2)

根据Reference Manual 8.17 Bit Syntax Expressions

  

在位串构造中使用,Size是一个表达式   评估为整数。

     

用于位串匹配,Size必须是整数或a   变量绑定到整数。

因此即使<<A:(size(A))/binary, Rest/binary>> = <<"hello">>语法正确,也不允许匹配(illegal bit size)。