BinaryFormat.Choice
Syntax
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Asi
Vrátí binární formát, který zvolí další binární formát na základě hodnoty, která již byla načtena. Hodnota binárního formátu vytvořená touto funkcí funguje ve fázích:
- Binární formát určený parametrem
binaryFormat
slouží ke čtení hodnoty. - Hodnota se předá funkci volby určené parametrem
chooseFunction
. - Funkce výběru zkontroluje hodnotu a vrátí druhý binární formát.
- Druhý binární formát se používá ke čtení druhé hodnoty.
- Pokud je zadaná kombinační funkce, předají se první a druhé hodnoty kombinační funkci a výsledná hodnota se vrátí.
- Pokud není zadaná kombinační funkce, vrátí se druhá hodnota.
- Vrátí se druhá hodnota.
Volitelný parametr type
označuje typ binárního formátu, který bude vrácen funkcí volby. Je možné zadat type any
, type list
nebo type binary
. Pokud není zadaný parametr type
, použije se type any
. Pokud se používá type list
nebo type binary
, může systém vrátit streamovanou hodnotu binary
nebo list
místo vyrovnané hodnoty, což může snížit množství paměti potřebné ke čtení formátu.
Příklad 1
Přečtěte si seznam bajtů, kde je počet prvků určený prvním bajtem.
Použití
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
výstup
{3,4}
Příklad 2
Přečtěte si seznam bajtů, kde počet prvků určuje první bajt a zachovejte přečtený první bajt.
Využití
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)
Výstup
[length = 2, list = {3, 4}]
Příklad 3
Přečtěte si seznam bajtů, kde je počet prvků určen prvním bajtem pomocí streamovaného seznamu.
Využití
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
výstupní
{3, 4}