Ενότητες
Ένα έγγραφο-ενότητας είναι ένα πρόγραμμα M που αποτελείται από πολλές επώνυμες παραστάσεις.
έγγραφο-ενότητας:
τμήμα
τμήμα:
χαρακτηριστικά-λεκτικής-σταθεράςπροα επιλέξουνsection
την επιλογή μελών-ενότηταςονόματος;
ενότητας
όνομα-ενότητας:
αναγνωριστικό
μέλη ενότητας:
μέλος-ενότητας επιλογή μελώνενότητας
μέλος ενότητας:
τα χαρακτηριστικά-λεκτικής-σταθεράς επιλέγουντηνshared
παράσταση ονόματος-μέλους-ενότητας=
;
όνομα-μέλους-ενότητας:
αναγνωριστικό
Στην M, μια ενότητα είναι μια οργανωτική έννοια που επιτρέπει την ονομασία και την ομαδοποίηση σχετικών παραστάσεων μέσα σε ένα έγγραφο. Κάθε ενότητα έχει ένα όνομα-ενότητας, το οποίο προσδιορίζει την ενότητα και αξιολογεί τα ονόματα των μελών-ενότητας που δηλώνονται μέσα στην ενότητα. Ένα μέλος-ενότητας αποτελείται από ένα όνομα-μέλους και μια παράσταση. Οι παραστάσεις μελών ενότητας μπορεί να αναφέρονται σε άλλα μέλη της ενότητας εντός της ίδιας ενότητας απευθείας με το όνομα μέλους.
Το παρακάτω παράδειγμα εμφανίζει ένα έγγραφο-ενότητας:
section Section1;
A = 1; //1
B = 2; //2
C = A + B; //3
Οι παραστάσεις μελών ενότητας μπορεί να αναφέρονται σε μέλη ενότητας που βρίσκονται σε άλλες ενότητες μέσω μιας παράστασης-πρόσβασης-ενότητας, η οποία αξιολογεί ένα όνομα μέλους ενότητας με το όνομα της ενότητας που το περιέχει.
παράσταση-πρόσβασης-ενότητας:
αναγνωριστικό αναγνωριστικού !
Το παρακάτω παράδειγμα εμφανίζει ένα σύνολο δύο εγγράφων που περιέχουν ενότητες που αναφέρονται αμοιβαία:
section Section1;
A = "Hello"; //"Hello"
B = 1 + Section2!A; //3
section Section2;
A = 2; //2
B = Section1!A & " world!"; //"Hello, world"
Τα μέλη ενότητας μπορούν προαιρετικά να δηλώνονται ως shared
, το οποίο παραλείπει την απαίτηση χρήσης μιας παράστασης-πρόσβασης-ενότητας κατά την αναφορά σε κοινόχρηστα μέλη εκτός της ενότητας που τα περιέχει. Τα κοινόχρηστα μέλη σε εξωτερικές ενότητες μπορεί να αναφέρονται από το μη πιστοποιημένο όνομα μέλους, εφόσον δεν δηλώνεται κανένα μέλος με το ίδιο όνομα στην ενότητα αναφοράς και καμία άλλη ενότητα δεν έχει ένα κοινόχρηστο μέλος με το ίδιο όνομα.
Το παρακάτω παράδειγμα απεικονίζει τη συμπεριφορά κοινόχρηστων μελών όταν χρησιμοποιούνται σε όλες τις ενότητες μέσα στο ίδιο σύνολο εγγράφων:
section Section1;
shared A = 1; // 1
section Section2;
B = A + 2; // 3 (refers to shared A from Section1)
section Section3;
A = "Hello"; // "Hello"
B = A + " world"; // "Hello world" (refers to local A)
C = Section1!A + 2; // 3
Ο ορισμός ενός κοινόχρηστου μέλους με το ίδιο όνομα σε διαφορετικές ενότητες θα παράγει ένα έγκυρο καθολικό περιβάλλον, ωστόσο, η πρόσβαση στο κοινόχρηστο μέλος θα προκαλέσει σφάλμα κατά την πρόσβαση σε αυτό.
section Section1;
shared A = 1;
section Section2;
shared A = "Hello";
section Section3;
B = A; //Error: shared member A has multiple definitions
Κατά την αξιολόγηση ενός συνόλου εγγράφων-ενοτήτων ισχύουν τα εξής:
Κάθε όνομα-ενότητας πρέπει να είναι μοναδικό στο καθολικό περιβάλλον.
Μέσα σε μια ενότητα, κάθε μέλος-ενότητας πρέπει να έχει ένα μοναδικό όνομα-μέλους-ενότητας.
Τα κοινόχρηστα μέλη ενοτήτων με περισσότερους από έναν ορισμούς προκαλούν σφάλμα κατά την πρόσβαση στο κοινόχρηστο μέλος.
Το στοιχείο παράστασης ενός μέλους-ενότητας δεν πρέπει να αξιολογείται πριν από την πρόσβαση στο μέλος ενότητας.
Τα σφάλματα που προέκυψαν κατά την αξιολόγηση του στοιχείου παράστασης ενός μέλους-ενότητας συσχετίζονται με αυτό το μέλος ενότητας πριν από τη μετάδοση προς τα έξω και, στη συνέχεια, προκύπτουν εκ νέου κάθε φορά που γίνεται πρόσβαση στο μέλος της ενότητας.
Ένα σύνολο εγγράφων ενότητας M μπορεί να συνδεθεί σε μια αδιαφανή τιμή εγγραφής που διαθέτει ένα πεδίο ανά κοινόχρηστο μέλος των εγγράφων ενοτήτων. Εάν τα κοινόχρηστα μέλη έχουν διφορούμενα ονόματα, προκαλείται σφάλμα.
Η τιμή της εγγραφής που προκύπτει πλησιάζει πλήρως το καθολικό περιβάλλον στο οποίο εκτελέστηκε η διαδικασία σύνδεσης. Επομένως, οι εγγραφές αυτές είναι κατάλληλα στοιχεία για τη σύνθεση εγγράφων M από άλλα (συνδεδεμένα) σύνολα εγγράφων M. Δεν υπάρχουν ευκαιρίες για διενέξεις ονομάτων.
Οι τυπικές συναρτήσεις Embedded.Value
βιβλιοθήκης μπορούν να χρησιμοποιηθούν για την ανάκτηση τέτοιων τιμών "ενσωματωμένων" εγγραφών που αντιστοιχούν σε επαναχρησιμοποιηθιζόμενα στοιχεία M.
Η M παρέχει πρόσβαση μέσω προγραμματισμού στο καθολικό περιβάλλον με τις #sections
λέξεις-κλειδιά και .#shared
Η #sections
εγγενής μεταβλητή επιστρέφει όλες τις ενότητες εντός του καθολικού περιβάλλοντος ως εγγραφή. Αυτή η εγγραφή βασίζεται στο όνομα ενότητας και κάθε τιμή είναι μια αναπαράσταση εγγραφής της αντίστοιχης ενότητας που έχει ευρετηριαστεί από το όνομα μέλους ενότητας.
Το παρακάτω παράδειγμα εμφανίζει ένα έγγραφο που αποτελείται από δύο ενότητες και την εγγραφή που παράγεται από την αξιολόγηση της #sections
εγγενούς μεταβλητής στο περιβάλλον αυτού του εγγράφου:
section Section1;
A = 1;
B = 2;
section Section2;
C = "Hello";
D = "world";
#sections
//[
// Section1 = [ A = 1, B = 2],
// Section2 = [ C = "Hello", D = "world" ]
//]
Τα παρακάτω ισχύουν κατά την αξιολόγηση του #sections
:
- Η
#sections
εγγενής μεταβλητή διατηρεί την κατάσταση αξιολόγησης όλων των παραστάσεων μέλους ενότητας εντός του εγγράφου. - Η
#sections
εγγενής μεταβλητή δεν επιβάλλει την αξιολόγηση τυχόν μη αξιολογημένων μελών ενότητας.
Η #shared
εγγενής μεταβλητή επιστρέφει τα περιεχόμενα του καθολικού περιβάλλοντος ως εγγραφή. (Το καθολικό περιβάλλον αποτελείται από όλα τα κοινόχρηστα μέλη ενότητας, καθώς και οποιαδήποτε αναγνωριστικά που περιλαμβάνονται απευθείας στο καθολικό περιβάλλον από την αξιολόγηση παράστασης.) Αυτή η εγγραφή χαρακτηρίζεται από το όνομα αναγνωριστικού, με κάθε τιμή να είναι η τιμή του συσχετισμένου αναγνωριστικού.
Το παρακάτω παράδειγμα εμφανίζει ένα έγγραφο με δύο κοινόχρηστα μέλη και την αντίστοιχη εγγραφή που παράγεται από την αξιολόγηση της #shared
εγγενούς μεταβλητής στο περιβάλλον αυτού του εγγράφου:
section Section1;
shared A = 1;
B = 2;
Section Section2;
C = "Hello";
shared D = "world";
//[
// A = 1,
// D = "world"
//]
Τα παρακάτω ισχύουν κατά την αξιολόγηση του #shared
:
Η
#shared
εγγενής μεταβλητή διατηρεί την κατάσταση αξιολόγησης του καθολικού περιβάλλοντος.Η
#shared
εγγενής μεταβλητή δεν επιβάλλει την αξιολόγηση οποιασδήποτε μη αξιολογημένης τιμής.