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 list
lub 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}