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

Over

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 is opgegeven door de parameter binaryFormat wordt gebruikt om een waarde te lezen.
  • De waarde wordt doorgegeven aan de keuzefunctie die is opgegeven door de parameter chooseFunction.
  • 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 parameter type geeft het type binaire indeling aan dat wordt geretourneerd door de keuzefunctie. Er kunnen type any, type listof type binary worden opgegeven. Als de parameter type niet is opgegeven, wordt 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, wat de hoeveelheid geheugen kan verminderen die nodig is om de indeling te lezen.

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 bepaald wordt door de eerste byte, en bewaar de eerste gelezen byte.

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}