BinaryFormat.Group
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Οι παράμετροι είναι ως εξής:
- Η
binaryFormat
παράμετρος καθορίζει τη δυαδική μορφή της τιμής κλειδιού. - Η
group
παράμετρος παρέχει πληροφορίες σχετικά με την ομάδα γνωστών στοιχείων. - Η προαιρετική
extra
παράμετρος μπορεί να χρησιμοποιηθεί για τον καθορισμό μιας συνάρτησης που θα επιστρέψει μια τιμή δυαδικής μορφής για την τιμή που ακολουθεί οποιοδήποτε μη αναμενόμενο κλειδί. Εάν η παράμετροςextra
δεν έχει καθοριστεί, τότε θα προκύπτει σφάλμα εάν υπάρχουν μη αναμενόμενες τιμές κλειδιών.
Η group
παράμετρος καθορίζει μια λίστα ορισμών στοιχείων. Κάθε ορισμός στοιχείου είναι μια λίστα, που περιέχει 3-5 τιμές, ως εξής:
- Τιμή κλειδιού. Η τιμή του κλειδιού που αντιστοιχεί στο στοιχείο. Αυτό πρέπει να είναι μοναδικό μέσα στο σύνολο στοιχείων.
- Μορφή στοιχείου. Η δυαδική μορφή που αντιστοιχεί στην τιμή του στοιχείου. Αυτό επιτρέπει σε κάθε στοιχείο να έχει διαφορετική μορφή.
- Εμφάνιση στοιχείου. Η τιμή BinaryOccurrence.Type για το πόσες φορές αναμένεται να εμφανιστεί το στοιχείο στην ομάδα. Τα απαιτούμενα στοιχεία που δεν είναι παρόντα προκαλούν σφάλμα. Τα απαιτούμενα ή προαιρετικά διπλότυπα στοιχεία αντιμετωπίζονται όπως οι μη αναμενόμενες τιμές κλειδιών.
- Προεπιλεγμένη τιμή στοιχείου (προαιρετικό). Εάν η προεπιλεγμένη τιμή στοιχείου εμφανίζεται στη λίστα ορισμών στοιχείων και δεν είναι null, τότε θα χρησιμοποιηθεί αντί για την προεπιλογή. Η προεπιλογή για επαναλαμβανόμενα ή προαιρετικά στοιχεία είναι null και η προεπιλογή για τις επαναλαμβανόμενες τιμές είναι μια κενή λίστα { }.
- Μετασχηματισμός τιμής στοιχείου (προαιρετικό). Εάν η συνάρτηση μετασχηματισμού τιμής στοιχείου υπάρχει στη λίστα ορισμών στοιχείων και δεν είναι null, τότε θα κληθεί για να μετασχηματίσει την τιμή στοιχείου προτού επιστραφεί. Η συνάρτηση μετασχηματισμού καλείται μόνο εάν το στοιχείο εμφανίζεται στην είσοδο (δεν θα κληθεί ποτέ με την προεπιλεγμένη τιμή).
Το παρακάτω προϋποθέτει μια τιμή κλειδιού που είναι ένα μόνο byte, με 4 αναμενόμενα στοιχεία στην ομάδα, τα οποία έχουν όλα ένα byte δεδομένων μετά από το κλειδί. Τα στοιχεία εμφανίζονται στην είσοδο ως εξής:
- Το κλειδί 1 απαιτείται και εμφανίζεται με την τιμή 11.
- Το κλειδί 2 επαναλαμβάνεται, εμφανίζεται δύο φορές με την τιμή 22 και έχει ως αποτέλεσμα την τιμή { 22, 22 }.
- Το κλειδί 3 είναι προαιρετικό, δεν εμφανίζεται και έχει ως αποτέλεσμα την τιμή null.
- Το κλειδί 4 επαναλαμβάνεται, αλλά δεν εμφανίζεται και έχει ως αποτέλεσμα την τιμή { }.
- Το κλειδί 5 δεν είναι μέρος της ομάδας, αλλά εμφανίζεται μία φορά με την τιμή 55. Η επιπλέον συνάρτηση καλείται με την τιμή κλειδιού 5 και επιστρέφει τη μορφή που αντιστοιχεί σε αυτή την τιμή (BinaryFormat.Byte). Η τιμή 55 διαβάζεται και απορρίπτεται.
Χρήση
let
b = #binary({
1, 11,
2, 22,
2, 22,
5, 55,
1, 11
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Required},
{2, BinaryFormat.Byte, BinaryOccurrence.Repeating},
{3, BinaryFormat.Byte, BinaryOccurrence.Optional},
{4, BinaryFormat.Byte, BinaryOccurrence.Repeating}
},
(extra) => BinaryFormat.Byte
)
in
f(b)
Έξοδος
{11, {22, 22}, null, {}}
Το παρακάτω παράδειγμα απεικονίζει τον μετασχηματισμό τιμής στοιχείου και την προεπιλεγμένη τιμή στοιχείου. Το επαναλαμβανόμενο στοιχείο με το κλειδί 1 αθροίζει τη λίστα τιμών που διαβάζονται με χρήση της List.Sum. Το προαιρετικό στοιχείο με το κλειδί 2 έχει προεπιλεγμένη τιμή 123 αντί για null.
Χρήση
let
b = #binary({
1, 101,
1, 102
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Repeating,
0, (list) => List.Sum(list)},
{2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123}
}
)
in
f(b)
Έξοδος
{203, 123}