Zdieľať cez


BinaryFormat.Choice

Syntax

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

O

Vráti binárny formát, ktorý vyberie nasledujúci binárny formát na základe už prečítanej hodnoty. Hodnota binárneho formátu vytvorená touto funkciou funguje v etapách:

  • Binárny formát zadaný parametrom binaryFormat sa použije na prečítanie hodnoty.
  • Hodnota sa odovzdá funkcii výberu zadanej parametrom chooseFunction.
  • Funkcia výberu skontroluje hodnotu a vráti druhý binárny formát.
  • Druhý binárny formát sa použije na prečítanie druhej hodnoty.
  • Ak je zadaná funkcia kombinovania, prvá a druhá hodnota sa odovzdá funkcii kombinovania a vráti sa výsledná hodnota.
  • Ak funkcia kombinovania nie je zadaná, vráti sa druhá hodnota.
  • Vráti sa druhá hodnota.

Voliteľný parameter type označuje typ binárneho formátu, ktorý vráti funkcia výberu. Možno zadať buď type any, type list, alebo type binary. Ak parameter type nie je zadaný, použije sa type any. Ak sa použije type list alebo type binary, systém môže byť schopný vrátiť hodnotu binary streamovania alebo list hodnotu namiesto hodnoty v medzipamäte, čo môže znížiť množstvo pamäte potrebné na prečítanie formátu.

Príklad č. 1

Prečítajte zoznam bajtov, v ktorom je počet prvkov určený prvým bajtom.

používania

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

výstupu

{3,4}

Príklad č. 2

Prečítajte zoznam bajtov, v ktorom je počet prvkov určený prvým bajtom, a zachovajte prvý prečítaný bajt.

používania

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ýstupu

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

Príklad č. 3

Prečítajte zoznam bajtov, v ktorom je počet prvkov určený prvým bajtom, a to pomocou zoznamu streamovania.

používania

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

výstupu

{3, 4}