Auf Englisch lesen

Freigeben über


BinaryFormat.Choice

Syntax

BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function

Info

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 listoder 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.

Beispiel 1

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}

Beispiel 2

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}]

Beispiel 3

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}