BinaryFormat.Choice
Sintassi
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Informazioni su
Restituisce un formato binario che sceglie il formato binario successivo in base a un valore che è già stato letto. Il valore del formato binario prodotto dalla funzione opera in fasi:
- Il formato binario specificato dal parametro
binaryFormat
viene usato per leggere un valore. - Il valore viene passato alla funzione di scelta specificata dal parametro
chooseFunction
. - La funzione di scelta controlla il valore e restituisce un secondo formato binario.
- Il secondo formato binario viene usato per leggere un secondo valore.
- Se la funzione di combinazione viene specificata, il primo e il secondo valore vengono passati alla funzione di combinazione e viene restituito il valore risultante.
- Se la funzione di combinazione non viene specificata, viene restituito il secondo valore.
- Il secondo valore viene restituito.
Il parametro facoltativo type
specifica il tipo di formato binario che verrà restituito dalla funzione di scelta. È possibile specificare type any
, type list
o type binary
. Se il parametro type
non è specificato, viene usato type any
. Se si usa type list
o type binary
, il sistema può essere in grado di restituire un valore binary
o list
di flusso anziché uno memorizzato nel buffer, riducendo in tal modo la quantità di memoria necessaria per leggere il formato.
Esempio 1
Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte.
Utilizzo
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Output
{3,4}
Esempio 2
Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte e conservare il primo byte letto.
Utilizzo
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}]
Esempio 3
Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte usando un elenco di flusso.
Utilizzo
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}