Delen via


BinaryFormat.Choice

Syntaxis

BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function

Info

Retourneert een binaire indeling die de volgende binaire indeling kiest op basis van een waarde die al is gelezen. De binaire indelingswaarde die door deze functie wordt geproduceerd, werkt in fasen:

  • De binaire indeling die door de binaryFormat parameter wordt opgegeven, wordt gebruikt om een waarde te lezen.
  • De waarde wordt doorgegeven aan de keuzefunctie die is opgegeven door de chooseFunction parameter.
  • De keuzefunctie inspecteert de waarde en retourneert een tweede binaire indeling.
  • De tweede binaire indeling wordt gebruikt om een tweede waarde te lezen.
  • Als de functie combineren is opgegeven, worden de eerste en tweede waarden doorgegeven aan de combinatiefunctie en wordt de resulterende waarde geretourneerd.
  • Als de functie combineren niet is opgegeven, wordt de tweede waarde geretourneerd.
  • De tweede waarde wordt geretourneerd.

De optionele type parameter geeft het type binaire indeling aan dat wordt geretourneerd door de keuzefunctie. Ofwel type any, type listof type binary kan worden opgegeven. Als de type parameter niet is opgegeven, wordt deze type any gebruikt. Als type list of type binary wordt gebruikt, kan het systeem mogelijk een streaming binary of list waarde retourneren in plaats van een gebufferde waarde, waardoor de hoeveelheid geheugen die nodig is om de indeling te lezen, kan verminderen.

Voorbeeld 1

Lees een lijst met bytes waarin het aantal elementen wordt bepaald door de eerste byte.

Gebruik

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

Uitvoer

{3,4}

Voorbeeld 2

Lees een lijst met bytes waarbij het aantal elementen wordt bepaald door de eerste byte en de eerste byte behouden.

Gebruik

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)

Uitvoer

[length = 2, list = {3, 4}]

Voorbeeld 3

Lees een lijst met bytes waarin het aantal elementen wordt bepaald door de eerste byte met behulp van een streaminglijst.

Gebruik

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

Uitvoer

{3, 4}