Del via


BinaryFormat.Choice

Syntaks

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

Omtrent

Returnerer et binært format, der vælger det næste binære format baseret på en værdi, der allerede er læst. Den binære formatværdi, der produceres af denne funktion, fungerer i faser:

  • Det binære format, der er angivet i parameteren binaryFormat, bruges til at læse en værdi.
  • Værdien overføres til den valgfunktion, der er angivet af parameteren chooseFunction.
  • Valgfunktionen undersøger værdien og returnerer et andet binært format.
  • Det andet binære format bruges til at læse en anden værdi.
  • Hvis kombinationsfunktionen er angivet, overføres den første og den anden værdi til kombiner-funktionen, og den resulterende værdi returneres.
  • Hvis kombinationsfunktionen ikke er angivet, returneres den anden værdi.
  • Den anden værdi returneres.

Den valgfri type parameter angiver den type binært format, der returneres af valgfunktionen. Enten type any, type listeller type binary kan angives. Hvis parameteren type ikke er angivet, bruges type any. Hvis type list eller type binary bruges, kan systemet muligvis returnere en streaming-binary eller list værdi i stedet for en buffer, hvilket kan reducere mængden af hukommelse, der er nødvendig for at læse formatet.

Eksempel 1

Læs en liste over byte, hvor antallet af elementer bestemmes af den første byte.

brug

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

output

{3,4}

Eksempel 2

Læs en liste over byte, hvor antallet af elementer bestemmes af den første byte, og bevar den første bytelæsning.

brug

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)

output

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

Eksempel 3

Læs en liste over byte, hvor antallet af elementer bestemmes af den første byte ved hjælp af en streamingliste.

brug

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

output

{3, 4}