BinaryFormat.Group

BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function

参数如下所示:

  • binaryFormat 参数指定键值的二进制格式。
  • group 参数提供与已知项的组有关的信息。
  • 可选的 extra 参数可用于指定一个函数,该函数将为跟随在任何意外的键之后的值返回一个二进制格式值。如果未指定 extra 参数,则在存在意外的键值时会引发错误。
group 参数指定项定义的列表。每个项定义都是一个列表,包含 3-5 个值,如下所示:
  • 键值。与项相对应的键的值。该值在项组内必须唯一。
  • 项格式。与项的值相对应的二进制格式。其允许每个项都具有不同的格式。
  • 项出现次数。针对该项应在组中出现多少次的 BinaryOccurrence.Type 值。如果必需的项未提供,将会导致错误。像对待意外键值一样处理必需的或可选的重复项。
  • 默认项值(可选)。如果默认项值出现在项定义列表中并且不为 Null,将使用默认项值而非默认值。重复或可选项的默认值为 Null,而重复值的默认值为空列表 { }。
  • 项值转换(可选)。如果在项定义列表中提供了项值转换函数并且不为 Null,将调用该函数以便转换该项值,然后才能返回它。只有在该项出现在输入中的情况下才调用该转换函数(将永远不会用默认值调用它)。
示例:

下面假定一个键值,它是单字节的,在组中应该有 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, { } }

示例:

下面的示例说明项值转换和默认项值。 具有键 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 }

results matching ""

    No results matching ""