Erlang 位语法:模式匹配中的默认大小?

Erlang 位语法:模式匹配中的默认大小?,erlang,Erlang,根据编程Erlang(第二),p。103: “大小”的值指定线段的大小。默认值 取决于类型。整数是8,浮点是64, 对于二进制文件,它是二进制文件的大小在模式匹配中, 此默认值仅对最后一个元素有效 下面的示例是否反驳了“模式匹配中的最后一个元素是唯一可以使用默认大小的元素”的规则: 1>Bin=。 2> =箱%使用整数的默认大小。 3> 十,。 97 4> 休息。 重复编程Erlang(第2条)中所述的相同规则: 4.4默认值 … … 默认大小取决于类型。整数是8。浮球 是64。对于二进制,它

根据编程Erlang(第二),p。103:

“大小”的值指定线段的大小。默认值 取决于类型。整数是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