为什么以下说变量未绑定?
9> {<<A:Length/binary, Rest/binary>>, Length} = {<<1,2,3,4,5>>, 3}.
* 1: variable 'Length' is unbound
Run Code Online (Sandbox Code Playgroud)
很明显Length应该是3.
我试图有一个类似模式匹配的功能,即:
parse(<<Body:Length/binary, Rest/binary>>, Length) ->
Run Code Online (Sandbox Code Playgroud)
但如果失败的原因相同.如何实现我想要的模式匹配?
我真正想要实现的是将传入的tcp流包解析为LTV(长度,类型,值).
在我解析长度和类型后的某个时刻,我想只准备多达Length字节数作为值,因为其余的可能是下一个LTV.
所以我的parse_value功能是这样的:
parse_value(Value0, Left, Callback = {Module, Function},
{length, Length, type, Type, value, Value1}) when byte_size(Value0) >= Left ->
<<Value2:Left/binary, Rest/binary>> = Value0,
Module:Function({length, Length, type, Type, value, lists:reverse([Value2 | Value1])}),
if
Rest =:= <<>> ->
{?MODULE, parse, {}};
true ->
parse(Rest, Callback, {})
end;
parse_value(Value0, Left, _, {length, Length, type, Type, …Run Code Online (Sandbox Code Playgroud) erlang ×1