BinaryFormat.Choice
Syntaxis
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Over
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 is opgegeven door de parameter
binaryFormat
wordt gebruikt om een waarde te lezen. - De waarde wordt doorgegeven aan de keuzefunctie die is opgegeven door de parameter
chooseFunction
. - 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 parameter type
geeft het type binaire indeling aan dat wordt geretourneerd door de keuzefunctie. Er kunnen type any
, type list
of type binary
worden opgegeven. Als de parameter type
niet is opgegeven, wordt 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, wat de hoeveelheid geheugen kan verminderen die nodig is om de indeling te lezen.
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 bepaald wordt door de eerste byte, en bewaar de eerste gelezen byte.
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}