BinaryFormat.Choice
Syntaxe
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
À propos
Retourne un format binaire qui sélectionne le format binaire suivant en fonction d’une valeur déjà lue. La valeur du format binaire produite par cette fonction fonctionne par étapes :
- Le format binaire spécifié par le paramètre
binaryFormat
est utilisé pour lire une valeur. - La valeur est passée à la fonction de choix spécifiée par le paramètre
chooseFunction
. - La fonction de choix inspecte la valeur et retourne un second format binaire.
- Le second format binaire est utilisé pour lire une seconde valeur.
- Si la fonction de combinaison est spécifiée, alors les première et seconde valeurs sont passées à la fonction de combinaison et la valeur obtenue est retournée.
- Si la fonction de combinaison n’est pas spécifiée, la seconde valeur est retournée.
- La seconde valeur est retournée.
Le paramètre facultatif type
indique le type de format binaire que va retourner la fonction de choix. type any
, type list
ou type binary
peuvent être spécifiés. Si le paramètre type
n’est pas spécifié, alors type any
est utilisé. Si type list
ou type binary
est utilisé, alors le système peut éventuellement retourner une valeur binary
ou list
de streaming au lieu d’une valeur mise en mémoire tampon, ce qui peut réduire la quantité de mémoire nécessaire pour lire le format.
Exemple 1
Lecture d’une liste d’octets où le nombre d’éléments est déterminé par le premier octet.
Utilisation
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Sortie
{3,4}
Exemple 2
Lecture d’une liste d’octets où le nombre d’éléments est déterminé par le premier octet, et qui conserve le premier octet lu.
Utilisation
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)
Sortie
[length = 2, list = {3, 4}]
Exemple 3
Lecture d’une liste d’octets où le nombre d’éléments est déterminé par le premier octet à l’aide d’une liste de streaming.
Utilisation
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Sortie
{3, 4}