Jon*_*nas 2 binary erlang pattern-matching
我想对二进制文件进行递归,并在每次调用中从二进制文件读取最多32位,并以新的二进制文件返回它.但我不能让模式匹配按我的意愿工作.
binaryToBinary(Source) ->
binaryToBinaryAux(Source, <<>>).
binaryToBinaryAux(<<>>, Target) ->
Target;
binaryToBinaryAux(<<H:32/binary, T/binary>>, Target) ->
binaryToBinaryAux(<<T/binary>>, <<Target/binary, H>>).
Run Code Online (Sandbox Code Playgroud)
这是我得到的模式匹配错误:
10> mymodule:binaryToBinary(<<"JonasPonas">>).
** exception error: no function clause matching
mymodule:binaryToBinaryAux(<<"JonasPonas">>,<<>>)
(mymodule.erl, line 51)
Run Code Online (Sandbox Code Playgroud)
我对二进制模式匹配做错了什么?
该模式<<H:32/binary, T/binary>>匹配包含至少32个字节的二进制,将前32个字节分配给H,将剩余字节分配给T.模式<<>>匹配空二进制.这些是你唯一的模式.
<<"JonasPonas">>既不是空的也不至少有32个字节.因此,它与您的任何一种模式都不匹配,您会收到错误.
要修复此问题,请添加一个处理小于32个字节的二进制文件的模式(您也可以删除空模式,因为它将是多余的).
| 归档时间: |
|
| 查看次数: |
4921 次 |
| 最近记录: |