Partilhar via


BinaryFormat.Choice

Sintaxe

BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function

Sobre nós

Retorna um formato binário que escolhe o próximo formato binário com base em um valor que já foi lido. O valor do formato binário produzido por esta função funciona em etapas:

  • O formato binário especificado pelo parâmetro binaryFormat é usado para ler um valor.
  • O valor é passado para a função de escolha especificada pelo parâmetro chooseFunction.
  • A função choice inspeciona o valor e retorna um segundo formato binário.
  • O segundo formato binário é usado para ler um segundo valor.
  • Se a função combine for especificada, o primeiro e o segundo valores serão passados para a função combine e o valor resultante será retornado.
  • Se a função combinar não for especificada, o segundo valor será retornado.
  • O segundo valor é retornado.

O parâmetro type opcional indica o tipo de formato binário que será retornado pela função de escolha. Podem ser especificados type any, type listou type binary. Se o parâmetro type não for especificado, type any será usado. Se type list ou type binary for usado, o sistema poderá retornar um binary de streaming ou um valor de list em vez de um valor em buffer, o que pode reduzir a quantidade de memória necessária para ler o formato.

Exemplo 1

Leia uma lista de bytes onde o número de elementos é determinado pelo primeiro byte.

Utilização

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

Saída

{3,4}

Exemplo 2

Leia uma lista de bytes onde o número de elementos é determinado pelo primeiro byte e preserve o primeiro byte lido.

Utilização

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.Record([
            length = length,
            list = BinaryFormat.List(BinaryFormat.Byte, length)
        ])
    )
in
    listFormat(binaryData)

Saída

[length = 2, list = {3, 4}]

Exemplo 3

Leia uma lista de bytes onde o número de elementos é determinado pelo primeiro byte usando uma lista de streaming.

Utilização

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

Saída

{3, 4}