Teilen über


BinaryFormat.Choice

Syntax

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

About

Gibt ein Binärformat zurück, das das nächste Binärformat basierend auf einem bereits gelesenen Wert auswäht. Der von dieser Funktion erzeugte Binärformatwert funktioniert in Phasen:

  • Das durch den binaryFormat Parameter angegebene Binärformat wird verwendet, um einen Wert zu lesen.
  • Der Wert wird an die vom Parameter angegebene chooseFunction Auswahlfunktion übergeben.
  • Die Auswahlfunktion prü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 ist, werden die ersten und zweiten Werte an die Kombinationsfunktion übergeben, 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, der von der Auswahlfunktion zurückgegeben wird. Entweder type any, , type listoder type binary kann angegeben werden. Wenn der type Parameter nicht angegeben ist, wird er type any verwendet. Wenn type list oder type binary verwendet wird, kann das System möglicherweise ein Streaming binary oder list einen Wert anstelle eines gepufferten Zurückgebens, wodurch die zum Lesen des Formats erforderliche Arbeitsspeichermenge reduziert werden kann.

Beispiel 1

Lesen Sie eine Liste von Bytes, in der die Anzahl der Elemente 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)

Output

{3,4}

Beispiel 2

Lesen Sie eine Liste von Bytes, in der die Anzahl der Elemente durch das erste Byte bestimmt wird, und bewahren Sie das erste Byte-Lesevorgang auf.

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)

Output

[length = 2, list = {3, 4}]

Beispiel 3

Lesen Sie eine Liste von Bytes, in der die Anzahl der Elemente durch das erste Byte mithilfe einer Streamingliste bestimmt wird.

Verwendung

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}