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