Dela via


BinaryFormat.Choice

Syntax

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

Om

Returnerar ett binärt format som väljer nästa binära format baserat på ett värde som redan har lästs. Värdet för binärt format som skapas av den här funktionen fungerar i steg:

  • Det binära format som anges av parametern binaryFormat används för att läsa ett värde.
  • Värdet skickas till den valfunktion som anges av parametern chooseFunction .
  • Valfunktionen inspekterar värdet och returnerar ett andra binärt format.
  • Det andra binära formatet används för att läsa ett andra värde.
  • Om kombinationsfunktionen har angetts skickas de första och andra värdena till kombinationsfunktionen och det resulterande värdet returneras.
  • Om kombinationsfunktionen inte har angetts returneras det andra värdet.
  • Det andra värdet returneras.

Den valfria type parametern anger vilken typ av binärt format som ska returneras av valfunktionen. Antingen type any, type listeller type binary kan anges. Om parametern type inte har angetts används den type any . Om type list eller type binary används kan systemet returnera en strömning binary eller list ett värde i stället för ett buffrat värde, vilket kan minska mängden minne som krävs för att läsa formatet.

Exempel 1

Läs en lista över byte där antalet element bestäms av den första byteen.

Användning

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

Output

{3,4}

Exempel 2

Läs en lista över byte där antalet element bestäms av den första byteen och bevara den första byteläsningen.

Användning

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

Exempel 3

Läs en lista med byte där antalet element bestäms av den första byteen med hjälp av en strömningslista.

Användning

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}