BinaryFormat.Choice
Syntaksi
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Noin
Palauttaa binaarimuodon, joka valitsee seuraavan binaarimuodon jo luetun arvon perusteella. Tämän funktion tuottama binaarimuotoarvo toimii vaiheittain:
-
binaryFormat
-parametrin määrittämää binaarimuotoa käytetään arvon lukemiseen. - Arvo välitetään
chooseFunction
-parametrin määrittämälle valintafunktiolle. - Valintafunktio tutkii arvon ja palauttaa toisen binaarimuodon.
- Toista binaarimuotoa käytetään toisen arvon lukemiseen.
- Jos yhdistämisfunktio on määritetty, ensimmäiset ja toiset arvot välitetään yhdistämisfunktiolle, ja tulokseksi saatava arvo palautetaan.
- Jos yhdistämisfunktiota ei ole määritetty, toinen arvo palautetaan.
- Toinen arvo palautetaan.
Valinnainen type
-parametri ilmaisee valintafunktion palauttaman binaarimuodon tyypin. Voidaan määrittää joko type any
, type list
tai type binary
. Jos type
-parametria ei määritetä, käytetään type any
. Jos käytetään type list
tai type binary
, järjestelmä saattaa pystyä palauttamaan virtautettavan binary
tai list
arvon puskuroitujen arvojen sijasta, mikä voi vähentää muodon lukemiseen tarvittavan muistin määrää.
Esimerkki 1
Lue tavuluettelo, jossa ensimmäinen tavu määrittää elementtien määrän.
käyttö
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Output
{3,4}
Esimerkki 2
Lue tavuluettelo, jossa ensimmäinen tavu määrittää elementtien määrän, ja säilytä ensimmäinen luettu tavu.
käyttö
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)
Output
[length = 2, list = {3, 4}]
Esimerkki 3
Lue tavuluettelo, jossa ensimmäinen tavu määrittää elementtien määrän käyttämällä virtautusluetteloa.
käyttö
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Output
{3, 4}