Erlang 位语法:模式匹配中的默认大小?
根据编程Erlang(第二),p。103: “大小”的值指定线段的大小。默认值 取决于类型。整数是8,浮点是64, 对于二进制文件,它是二进制文件的大小在模式匹配中, 此默认值仅对最后一个元素有效 下面的示例是否反驳了“模式匹配中的最后一个元素是唯一可以使用默认大小的元素”的规则:Erlang 位语法:模式匹配中的默认大小?,erlang,Erlang,根据编程Erlang(第二),p。103: “大小”的值指定线段的大小。默认值 取决于类型。整数是8,浮点是64, 对于二进制文件,它是二进制文件的大小在模式匹配中, 此默认值仅对最后一个元素有效 下面的示例是否反驳了“模式匹配中的最后一个元素是唯一可以使用默认大小的元素”的规则: 1>Bin=。 2> =箱%使用整数的默认大小。 3> 十,。 97 4> 休息。 重复编程Erlang(第2条)中所述的相同规则: 4.4默认值 … … 默认大小取决于类型。整数是8。浮球 是64。对于二进制,它
1>Bin=。
2> =箱%使用整数的默认大小。
3> 十,。
97
4> 休息。
重复编程Erlang(第2条)中所述的相同规则:
4.4默认值…
…
默认大小取决于类型。整数是8。浮球 是64。对于二进制,它是所有二进制的在匹配中,此 默认值仅对最后一个元素有效。所有其他元素 匹配中的二进制元素必须具有大小规格
好吧,现在我已经发布了文档中的引用,我注意到它说: 在匹配中,此默认值仅对最后一个有效 元素。匹配中的所有其他二进制元素必须有一个大小 规格 事实上,我在这里得到了一个错误:
7> f().
ok
8> Bin = <<97, 98, 99>>.
<<"abc">>
9> <<B/binary, X/integer>> = Bin.
* 1: a binary field without size is only allowed at the end of a binary pattern
7>f()。
好啊
8> Bin=。
9> =垃圾箱。
*1:不带大小的二进制字段仅允许位于二进制模式的末尾
那里的错误信息比文档和编程Erlang(第二)中的任何内容都要清楚。所以在我看来,这些文件应该重写,类似这样:
4.4违约
[开头省略:甚至不是合法语法。]
在构造中,默认大小取决于类型。整数是8。对于float,它是64。对于二进制文件,它是文件的实际大小
指定的二进制文件:
1> Bin = << <<97, 98, 99>>/binary, 17/integer, 3.2/float >>.
<<97,98,99,17,64,9,153,153,153,153,153,154>>
|<------>| ^|<-------------------------->|
binary=24 | float=64
|
integer=8
2> size(Bin). % Returns the number of bytes:
12 % 3*8 bits + 8 bits + 64 bits = 96 bits => 96/8 = 12 bytes
1>Bin=>。
|| ^||
二进制=24 |浮点=64
|
整数=8
2> 尺寸(箱)。%返回字节数:
12%3*8位+8位+64位=96位=>96/8=12字节
在匹配中,没有显式大小的二进制段只允许位于模式的末尾,其默认大小是模式中剩余的字节数
匹配右侧的二进制文件:
25> Bin = <<97, 98, 99>>.
<<"abc">>
26> << X/integer, Rest/binary >> = Bin.
<<"abc">>
27> X.
97
28> Rest.
<<"bc">>
25>Bin=。
26>>=Bin。
27>X。
97
28>休息。
模式中类型为binary的所有其他段必须指定一个大小:
12> Bin = <<97, 98, 99, 100>>.
<<"abcd">>
13> << B:1/binary, X/integer, Rest/binary >> = Bin. %'unit' defaults to 8 for
<<"abcd">> %binary type, total segment size is Size * unit
14> B.
<<"a">>
15> X.
98
16> Rest.
<<"cd">>
17> << B2/binary, X2/integer, Rest2/binary >> = Bin.
* 1: a binary field without size is only allowed at the end of a binary pattern
12>Bin=。
13> >=仓位%'“单位”默认为8
%二进制类型,总段大小为大小*单位
14> B。
15> 十,。
98
16> 休息。
17> >=Bin。
*1:不带大小的二进制字段仅允许位于二进制模式的末尾
我说的对吗?如果您认为文档中的某些内容应该更改,您可能应该将此讨论转到erlang问题邮件列表。看见
12> Bin = <<97, 98, 99, 100>>.
<<"abcd">>
13> << B:1/binary, X/integer, Rest/binary >> = Bin. %'unit' defaults to 8 for
<<"abcd">> %binary type, total segment size is Size * unit
14> B.
<<"a">>
15> X.
98
16> Rest.
<<"cd">>
17> << B2/binary, X2/integer, Rest2/binary >> = Bin.
* 1: a binary field without size is only allowed at the end of a binary pattern