BinaryFormat.Choice
Синтаксис
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Около
Возвращает двоичный формат, который выбирает следующий двоичный формат на основе значения, которое уже было прочитано. Значение двоичного формата, созданное этой функцией, работает на этапах:
- Двоичный формат, указанный параметром
binaryFormat
, используется для чтения значения. - Значение передается функции выбора, указанной параметром
chooseFunction
. - Функция выбора проверяет значение и возвращает второй двоичный формат.
- Второй двоичный формат используется для чтения второго значения.
- Если указана функция объединения, то первые и второй значения передаются в функцию объединения, а результирующее значение возвращается.
- Если функция объединения не указана, возвращается второе значение.
- Возвращается второе значение.
Необязательный параметр type
указывает тип двоичного формата, возвращаемого функцией выбора. Можно указать type any
, type list
или type binary
. Если параметр type
не указан, используется type any
. Если используется type list
или type binary
, система может вернуть значение потоковой передачи binary
или list
вместо буферизованного, что может уменьшить объем памяти, необходимой для чтения формата.
Пример 1
Прочитайте список байтов, в которых число элементов определяется первым байтом.
использование
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
выход
{3,4}
Пример 2
Прочитайте список байтов, где количество элементов определяется первым байтом, при этом первый байт сохраняется.
использование
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)
выход
[length = 2, list = {3, 4}]
Пример 3
Прочитайте список байтов, в котором число элементов определяется первым байтом с использованием потокового списка.
использование
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Выход
{3, 4}