Sdílet prostřednictvím


BinaryFormat.Choice

Syntax

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

Asi

Vrátí binární formát, který zvolí další binární formát na základě hodnoty, která již byla načtena. Hodnota binárního formátu vytvořená touto funkcí funguje ve fázích:

  • Binární formát určený parametrem binaryFormat slouží ke čtení hodnoty.
  • Hodnota se předá funkci volby určené parametrem chooseFunction.
  • Funkce výběru zkontroluje hodnotu a vrátí druhý binární formát.
  • Druhý binární formát se používá ke čtení druhé hodnoty.
  • Pokud je zadaná kombinační funkce, předají se první a druhé hodnoty kombinační funkci a výsledná hodnota se vrátí.
  • Pokud není zadaná kombinační funkce, vrátí se druhá hodnota.
  • Vrátí se druhá hodnota.

Volitelný parametr type označuje typ binárního formátu, který bude vrácen funkcí volby. Je možné zadat type any, type listnebo type binary. Pokud není zadaný parametr type, použije se type any. Pokud se používá type list nebo type binary, může systém vrátit streamovanou hodnotu binary nebo list místo vyrovnané hodnoty, což může snížit množství paměti potřebné ke čtení formátu.

Příklad 1

Přečtěte si seznam bajtů, kde je počet prvků určený prvním bajtem.

Použití

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

výstup

{3,4}

Příklad 2

Přečtěte si seznam bajtů, kde počet prvků určuje první bajt a zachovejte přečtený první bajt.

Využití

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)

Výstup

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

Příklad 3

Přečtěte si seznam bajtů, kde je počet prvků určen prvním bajtem pomocí streamovaného seznamu.

Využití

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

výstupní

{3, 4}