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

Om

Returnerer et binærformat som velger det neste binære formatet basert på en verdi som allerede er lest. Den binære formatverdien som produseres av denne funksjonen, fungerer i faser:

  • Det binære formatet angitt av parameteren binaryFormat brukes til å lese en verdi.
  • Verdien sendes til valgfunksjonen som er angitt av parameteren chooseFunction .
  • Valgfunksjonen undersøker verdien og returnerer et annet binærformat.
  • Det andre binære formatet brukes til å lese en annen verdi.
  • Hvis kombinasjonsfunksjonen er angitt, sendes de første og andre verdiene til kombineringsfunksjonen, og resultatverdien returneres.
  • Hvis kombineringsfunksjonen ikke er angitt, returneres den andre verdien.
  • Den andre verdien returneres.

Den valgfrie type parameteren angir typen binærformat som returneres av valgfunksjonen. Enten type any, type listeller type binary kan angis. Hvis parameteren type ikke er angitt, brukes den type any . Hvis type list eller type binary brukes, kan systemet kanskje returnere en strømming binary eller list verdi i stedet for en bufret, noe som kan redusere mengden minne som er nødvendig for å lese formatet.

Eksempel 1

Les en liste over byte der antall elementer bestemmes av den første byten.

Bruk

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

Utdata

{3,4}

Eksempel 2

Les en liste over byte der antall elementer bestemmes av den første byten, og behold den første bytelesingen.

Bruk

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)

Utdata

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

Eksempel 3

Les en liste over byte der antall elementer bestemmes av den første byten ved hjelp av en strømmingsliste.

Bruk

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

Utdata

{3, 4}