Κοινή χρήση μέσω


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}