Syntax
BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as nullable function,
optional lastKey as any
) as function
About
参数如下:
- 该
binaryFormat参数指定键值的二进制格式。 - 该
group参数提供有关已知项组的信息。 - 可选
extra参数可用于指定一个函数,该函数将在出现意外的任何键后返回值的二进制格式值。 如果未指定参数extra,则如果存在意外的键值,将引发错误。
该 group 参数指定项定义列表。 每个项定义都是一个列表,其中包含 3-5 个值,如下所示:
- 键值。 对应于项的键的值。 这在项集中必须是唯一的。
- 项格式。 对应于项值的二进制格式。 这允许每个项具有不同的格式。
- 项匹配项。 项 BinaryOccurrence.Type 应出现在组中的次数的值。 不存在的必需项会导致错误。 必需项或可选的重复项处理方式类似于意外键值。
- 默认项值(可选)。 如果默认项值出现在项定义列表中且不为 null,则使用该值而不是默认值。 重复项或可选项的默认值为 null,重复值的默认值为空列表 { }。
- 项值转换(可选)。 如果项值转换函数存在于项定义列表中且不为 null,则在返回项值之前将调用它来转换项值。 仅当项出现在输入中(永远不会使用默认值调用)时,才会调用转换函数。
示例 1
下面假设一个键值是单个字节,组中有 4 个预期项,所有这些项都遵循键的数据字节。 这些项显示在输入中,如下所示:
- 密钥 1 是必需的,并且显示值 11。
- 键 2 重复,并出现两次值 22,并导致值 { 22, 22 }。
- 键 3 是可选的,不会显示,并导致值为 null。
- 键 4 重复,但不显示,并导致值 { }。
- 键 5 不是组的一部分,但出现一次值为 55。 使用键值 5 调用额外函数,并返回与该值对应的格式(BinaryFormat.Byte)。 将读取并丢弃值 55。
用法
let
b = #binary({
1, 11,
2, 22,
2, 22,
5, 55,
1, 11
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Required},
{2, BinaryFormat.Byte, BinaryOccurrence.Repeating},
{3, BinaryFormat.Byte, BinaryOccurrence.Optional},
{4, BinaryFormat.Byte, BinaryOccurrence.Repeating}
},
(extra) => BinaryFormat.Byte
)
in
f(b)
输出
{11, {22, 22}, null, {}}
示例 2
下面的示例演示了项值转换和默认项值。 键 1 的重复项对使用的值 List.Sum列表进行求和。 键 2 的可选项的默认值为 123,而不是 null。
用法
let
b = #binary({
1, 101,
1, 102
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Repeating,
0, (list) => List.Sum(list)},
{2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123}
}
)
in
f(b)
输出
{203, 123}