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 list
eller 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}