BinaryFormat.Choice
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Gibt ein Binärformat zurück, das das nächste Binärformat auf der Grundlage eines bereits gelesenen Werts auswählt. Der von dieser Funktion erzeugte binäre Formatwert funktioniert stufenweise:
- Das vom
binaryFormat
-Parameter angegebene Binärformat wird verwendet, um einen Wert zu lesen. - Der Wert wird an die Auswahlfunktion übergeben, die vom
chooseFunction
-Parameter angegeben wird. - Die Auswahlfunktion überprüft den Wert und gibt ein zweites Binärformat zurück.
- Das zweite Binärformat wird verwendet, um einen zweiten Wert zu lesen.
- Wenn die Kombinationsfunktion angegeben wird, werden der erste und der zweite Wert an die Kombinationsfunktion übergegeben, und der resultierende Wert wird zurückgegeben.
- Wenn die Kombinationsfunktion nicht angegeben ist, wird der zweite Wert zurückgegeben.
- Der zweite Wert wird zurückgegeben.
Der optionale type
-Parameter gibt den Typ des Binärformats an, das von der Auswahlfunktion zurückgegeben wird. Entweder type any
, type list
oder type binary
kann angegeben werden. Wenn der type
-Parameter nicht angegeben wird, wird type any
verwendet. Wenn type list
oder type binary
verwendet wird, kann das System möglicherweise einen gestreamten binary
- oder list
-Wert anstelle eines gepufferten zurückgeben, was die Größe des zum Lesen des Formats erforderlichen Arbeitsspeichers verringern kann.
Liest eine Liste mit Bytes, bei der die Anzahl von Elementen durch das erste Byte bestimmt wird.
Verwendung
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Ausgabe
{3,4}
Liest eine Liste mit Bytes, bei der die Anzahl von Elementen durch das erste Byte bestimmt wird, und behält das erste gelesene Byte bei.
Verwendung
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)
Ausgabe
[length = 2, list = {3, 4}]
Liest eine Liste mit Bytes, bei der die Anzahl von Elementen durch das erste Byte bestimmt wird, unter Verwendung einer Streamingliste.
Verwendung
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Ausgabe
{3, 4}