Partager via


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}