匹配之间有什么区别:
fun(Binary) ->
[Value, Rest] = binary:split(Binary, <<101>>)
end
和
fun(Binary) ->
[Value, <<Rest/binary>>] = binary:split(Binary, <<101>>)
end
我在想一个人可能会在遍历二进制文件时简单地增加一个计数器并保留子二进制指针,而另一个将复制一个新的二进制文件。有任何想法吗?
匹配之间有什么区别:
fun(Binary) ->
[Value, Rest] = binary:split(Binary, <<101>>)
end
和
fun(Binary) ->
[Value, <<Rest/binary>>] = binary:split(Binary, <<101>>)
end
我在想一个人可能会在遍历二进制文件时简单地增加一个计数器并保留子二进制指针,而另一个将复制一个新的二进制文件。有任何想法吗?
我认为您可以通过timer
模块的tc/N
功能对其进行测试。
我可以通过两种方式考虑模式匹配。
方法一:
[A,B] = [<<"abcd">>,<<"fghi">>]
方法二:
[A, <<B/binary>>] = [<<"abcd">>,<<"fghi">>]
除非您需要确保 B 是二进制的,否则方法 2 将花费更长的时间,几微秒,因为它不仅将 <<"fghi">> 分配给 B,而且还要确保它是二进制的。
但是,如果您需要比方法 2 更多的解析,您可以走得更远,这是方法 1 做不到的。
[A, <<B:8, Rest/binary>>] = [<<"abcd">>,<<"fghi">>].