Κοινοποίηση μέσω


BinaryFormat.Choice

Σύνταξη

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

Περίπου

Επιστρέφει μια δυαδική μορφή που επιλέγει την επόμενη δυαδική μορφή με βάση μια τιμή που έχει ήδη αναγνωστεί. Η τιμή δυαδικής μορφής που παράγεται από αυτή τη συνάρτηση λειτουργεί σε στάδια:

  • Η δυαδική μορφή που καθορίζεται από την παράμετρο binaryFormat χρησιμοποιείται για την ανάγνωση μιας τιμής.
  • Η τιμή διαβιβάζεται στη συνάρτηση επιλογής που καθορίζεται από την παράμετρο chooseFunction.
  • Η συνάρτηση επιλογής ελέγχει την τιμή και επιστρέφει μια δεύτερη δυαδική μορφή.
  • Η δεύτερη δυαδική μορφή χρησιμοποιείται για την ανάγνωση μιας δεύτερης τιμής.
  • Εάν καθοριστεί η συνάρτηση συνδυασμού, τότε η πρώτη και η δεύτερη τιμή μεταβιβάζονται στη συνάρτηση συνδυασμού και επιστρέφεται η τιμή που προκύπτει.
  • Εάν η συνάρτηση συνδυασμού δεν έχει καθοριστεί, επιστρέφεται η δεύτερη τιμή.
  • Επιστρέφεται η δεύτερη τιμή.

Η προαιρετική παράμετρος type υποδεικνύει τον τύπο δυαδικής μορφής που θα επιστραφεί από τη συνάρτηση επιλογής. Μπορεί να καθοριστεί είτε type any, type listή type binary. Εάν η παράμετρος type δεν έχει καθοριστεί, τότε χρησιμοποιείται type any. Εάν χρησιμοποιείται type list ή type binary, τότε το σύστημα ενδέχεται να μπορεί να επιστρέψει μια binary ροής ή list τιμή αντί για μια τιμή που είναι αποθηκευμένη στο buffer, το οποίο μπορεί να μειώσει την ποσότητα μνήμης που είναι απαραίτητη για την ανάγνωση της μορφής.

Παράδειγμα 1

Ανάγνωση μιας λίστας από byte όπου ο αριθμός των στοιχείων προσδιορίζεται από το πρώτο byte.

χρήσης

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

εξόδου

{3,4}

Παράδειγμα 2

Ανάγνωση μιας λίστας από byte όπου ο αριθμός των στοιχείων προσδιορίζεται από το πρώτο byte και διατήρηση του πρώτου byte που διαβάστηκε.

χρήσης

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)

εξόδου

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

Παράδειγμα 3

Ανάγνωση μιας λίστας από byte όπου ο αριθμός των στοιχείων προσδιορίζεται από το πρώτο byte με τη χρήση μιας λίστας ροής.

χρήσης

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

εξόδου

{3, 4}