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