Udostępnij za pośrednictwem


BinaryFormat.Choice

Składnia

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

Informacje

Zwraca format binarny, który wybiera następny format binarny na podstawie wartości, która została już odczytowana. Wartość formatu binarnego utworzona przez tę funkcję działa na etapach:

  • Format binarny określony przez parametr binaryFormat służy do odczytywania wartości.
  • Wartość jest przekazywana do funkcji wyboru określonej przez parametr chooseFunction.
  • Funkcja wyboru sprawdza wartość i zwraca drugi format binarny.
  • Drugi format binarny służy do odczytywania drugiej wartości.
  • Jeśli zostanie określona funkcja łączenia, pierwsze i drugie wartości są przekazywane do funkcji combine, a wynikowa wartość jest zwracana.
  • Jeśli funkcja łączenia nie zostanie określona, zostanie zwrócona druga wartość.
  • Zwracana jest druga wartość.

Opcjonalny parametr type wskazuje typ formatu binarnego, który zostanie zwrócony przez funkcję wyboru. Można określić type any, type listlub type binary. Jeśli parametr type nie zostanie określony, zostanie użyty type any. Jeśli używana jest type list lub type binary, system może zwrócić wartość strumieniową binary lub list zamiast buforowanej, co może zmniejszyć ilość pamięci niezbędnej do odczytania formatu.

Przykład 1

Odczytaj listę bajtów, w których liczba elementów jest określana przez pierwszy bajt.

użycie

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

Wyjście

{3,4}

Przykład 2

Odczytaj listę bajtów, gdzie liczba elementów jest określana przez pierwszy bajt, i zachowaj pierwszy odczytany bajt.

użycie

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)

Wyjście

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

Przykład 3

Odczytaj listę bajtów, gdzie liczba elementów jest określana przez pierwszy bajt, korzystając z listy strumieniowej.

użycie

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

Wyjście

{3, 4}