BinaryFormat.Choice
Syntaxis
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Info
Retourneert een binaire indeling die de volgende binaire indeling kiest op basis van een waarde die al is gelezen. De binaire indelingswaarde die door deze functie wordt geproduceerd, werkt in fasen:
- De binaire indeling die door de
binaryFormat
parameter wordt opgegeven, wordt gebruikt om een waarde te lezen. - De waarde wordt doorgegeven aan de keuzefunctie die is opgegeven door de
chooseFunction
parameter. - De keuzefunctie inspecteert de waarde en retourneert een tweede binaire indeling.
- De tweede binaire indeling wordt gebruikt om een tweede waarde te lezen.
- Als de functie combineren is opgegeven, worden de eerste en tweede waarden doorgegeven aan de combinatiefunctie en wordt de resulterende waarde geretourneerd.
- Als de functie combineren niet is opgegeven, wordt de tweede waarde geretourneerd.
- De tweede waarde wordt geretourneerd.
De optionele type
parameter geeft het type binaire indeling aan dat wordt geretourneerd door de keuzefunctie. Ofwel type any
, type list
of type binary
kan worden opgegeven. Als de type
parameter niet is opgegeven, wordt deze type any
gebruikt. Als type list
of type binary
wordt gebruikt, kan het systeem mogelijk een streaming binary
of list
waarde retourneren in plaats van een gebufferde waarde, waardoor de hoeveelheid geheugen die nodig is om de indeling te lezen, kan verminderen.
Voorbeeld 1
Lees een lijst met bytes waarin het aantal elementen wordt bepaald door de eerste byte.
Gebruik
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Uitvoer
{3,4}
Voorbeeld 2
Lees een lijst met bytes waarbij het aantal elementen wordt bepaald door de eerste byte en de eerste byte behouden.
Gebruik
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)
Uitvoer
[length = 2, list = {3, 4}]
Voorbeeld 3
Lees een lijst met bytes waarin het aantal elementen wordt bepaald door de eerste byte met behulp van een streaminglijst.
Gebruik
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Uitvoer
{3, 4}