Τύποι
Μια τιμή τύπου είναι μια τιμή που ταξινομεί άλλες τιμές. Μια τιμή που ταξινομείται από έναν τύπο λέγεται ότι συμμορφώνεται με αυτόν τον τύπο. Το σύστημα τύπου M αποτελείται από τα ακόλουθα είδη τύπων:
Στοιχειώδεις τύποι, οι οποίοι ταξινομούν στοιχειώδεις τιμές (
binary
, ,date
,datetime
datetimezone
, ,duration
,list
,null
logical
,number
,text
record
, ,time
,type
) και περιλαμβάνουν επίσης έναν αριθμό αφηρημένων τύπων (function
,table
,any
anynonnull
και )none
Τύποι εγγραφών, οι οποίοι ταξινομούν τις τιμές εγγραφών με βάση τα ονόματα πεδίων και τους τύπους τιμών
Τύποι λίστας, οι οποίοι ταξινομούν τις λίστες χρησιμοποιώντας έναν τύπο βάσης ενός στοιχείου
Τύποι συναρτήσεων, οι οποίοι ταξινομούν τις τιμές συναρτήσεων με βάση τους τύπους των παραμέτρων τους και τις τιμές επιστροφής
Τύποι πινάκων, οι οποίοι ταξινομούν τις τιμές πίνακα με βάση τα ονόματα στηλών, τους τύπους στηλών και τα κλειδιά
Τύποι που επιδέχονται τιμές null, οι οποίοι ταξινομούν την τιμή null επιπλέον όλων των τιμών που ταξινομούνται με έναν βασικό τύπο
Τύποι τύπων, οι οποίοι ταξινομούν τις τιμές που είναι τύποι
Το σύνολο στοιχειώδεις τύπων περιλαμβάνει τους τύπους στοιχειώδεις τιμές και έναν αριθμό αφηρημένων τύπων, οι οποίοι είναι τύποι που δεν ταξινομούν μοναδικά τις τιμές: function
, table
, any
anynonnull
και none
. Όλες οι τιμές συναρτήσεων συμμορφώνονται με τον αφηρημένο τύπο function
, όλες οι τιμές πίνακα με τον αφηρημένο τύπο table
, όλες οι τιμές με τον αφηρημένο τύπο any
, όλες οι τιμές που δεν είναι null με τον αφηρημένο τύπο anynonnull
και δεν υπάρχουν τιμές στον αφηρημένο τύπο none
. Μια παράσταση τύπου none
πρέπει να εμφανίσει σφάλμα ή να αποτύχει, καθώς δεν ήταν δυνατή η παραγωγή τιμής που να είναι συμβατή με τον τύπο none
. Σημειώστε ότι οι στοιχειώδεις τύποι function
και table
είναι αφηρημένοι επειδή καμία συνάρτηση ή πίνακας δεν ανήκει απευθείας σε αυτούς τους τύπους, αντίστοιχα. Οι στοιχειώδεις τύποι record
και list
είναι μη αφηρημένοι επειδή αντιπροσωπεύουν μια ανοιχτή εγγραφή χωρίς καθορισμένα πεδία και μια λίστα με οποιονδήποτε τύπο, αντίστοιχα.
Όλοι οι τύποι που δεν είναι μέλη του κλειστού συνόλου στοιχειώδεις τύπων, καθώς και τα αντίστοιχά τους που επιδέχεται τιμές null αναφέρονται συλλογικά ως προσαρμοσμένοι τύποι. Οι προσαρμοσμένοι τύποι μπορούν να εγγραφούν χρησιμοποιώντας μια type-expression
:
παράσταση-τύπου:
κύρια-παράσταση
type
κύριος-τύπος
δακτυλογραφώ:
κύρια-παράσταση
κύριος-τύπος
κύριος-τύπος:
στοιχειώδης-τύπος
τύπος-εγγραφής
τύπος λίστας
τύπος-συνάρτησης
τύπος-πίνακα
τύπος-που επιδέχεται τιμές null
στοιχειώδης-τύπος: ένα από
any anynonnull binary date datetime datetimezone duration function list logical
none null number record table text time type
Τα ονόματα στοιχειώδεις-τύπων είναι λέξεις-κλειδιά βάσει περιεχομένου που αναγνωρίζονται μόνο σε ένα περιβάλλον τύπου . Η χρήση παρενθέσεων σε ένα περιβάλλον τύπου μετακινεί τη γραμματική πίσω σε ένα κανονικό περιβάλλον παράστασης, απαιτώντας τη χρήση της λέξης-κλειδιού type για να μετακινηθεί ξανά σε περιβάλλον τύπου. Για παράδειγμα, για την κλήση μιας συνάρτησης σε ένα περιβάλλον τύπου , μπορούν να χρησιμοποιηθούν παρενθέσεις:
type nullable ( Type.ForList({type number}) )
// type nullable {number}
Οι παρενθέσεις μπορούν επίσης να χρησιμοποιηθούν για πρόσβαση σε μια μεταβλητή της οποίας το όνομα έρχεται σε σύγκρουση με ένα όνομα στοιχειώδεις-τύπου :
let record = type [ A = any ] in type {(record)}
// type {[ A = any ]}
Το παρακάτω παράδειγμα ορίζει έναν τύπο που ταξινομεί μια λίστα αριθμών:
type { number }
Παρομοίως, το παρακάτω παράδειγμα ορίζει έναν προσαρμοσμένο τύπο που ταξινομεί εγγραφές με υποχρεωτικά πεδία με την ονομασία X
και Y
των οποίων οι τιμές είναι αριθμοί:
type [ X = number, Y = number ]
Ο τύπος τιμής που αποδίδεται λαμβάνεται με χρήση της συνάρτησης τυπικής βιβλιοθήκης Value.Type, όπως φαίνεται στα παρακάτω παραδείγματα:
Value.Type( 2 ) // type number
Value.Type( {2} ) // type list
Value.Type( [ X = 1, Y = 2 ] ) // type record
Ο is
τελεστής χρησιμοποιείται για να προσδιοριστεί εάν ο τύπος μιας τιμής είναι συμβατός με έναν δεδομένο τύπο, όπως φαίνεται στα παρακάτω παραδείγματα:
1 is number // true
1 is text // false
{2} is list // true
Ο as
τελεστής ελέγχει αν η τιμή είναι συμβατή με τον δεδομένο τύπο και, εάν δεν είναι, εμφανίζει σφάλμα. Διαφορετικά, επιστρέφει την αρχική τιμή.
Value.Type( 1 as number ) // type number
{2} as text // error, type mismatch
Σημειώστε ότι οι is
τελεστές και as
αποδέχονται μόνο στοιχειώδεις τύπους που επιδέχονται τιμές null ως τον σωστό τελεστέο τους. Η M δεν παρέχει μέσα για τον έλεγχο των τιμών για συμμόρφωση με τους προσαρμοσμένους τύπους.
Ένας τύπος X
είναι συμβατός με έναν τύπο Y
εάν και μόνο εάν όλες οι τιμές που συμμορφώνονται X
με το συμμορφώνονται επίσης με το Y
. Όλοι οι τύποι είναι συμβατοί με τον τύπο any
και κανένας τύπος (εκτός none
από το ίδιο το ) είναι συμβατός με τον τύπο none
. Το παρακάτω γράφημα εμφανίζει τη σχέση συμβατότητας. (Η συμβατότητα τύπου είναι ανακλαστική και μεταβατική. Δημιουργεί ένα πλέγμα με τύπο any
ως επάνω και πληκτρολογήστε none
ως κάτω τιμή.) Τα ονόματα των αφηρημένων τύπων ορίζονται με πλάγια γραφή.
Οι ακόλουθοι τελεστές έχουν ορισθεί για τις τιμές τύπου:
Τελεστής | Αποτέλεσμα |
---|---|
x = y |
Ίσο |
x <> y |
Δεν ισούται με |
x ?? y |
Coalesce |
Ο εγγενής τύπος τιμών τύπου είναι ο εγγενής τύπος type
.
Οι τύποι στη γλώσσα M σχηματίζουν μια ασυνεχή ιεραρχία που έχει τις ρίζες της στον τύπο any
, ο οποίος είναι ο τύπος που ταξινομεί όλες τις τιμές. Κάθε τιμή M συμμορφώνεται με έναν ακριβώς στοιχειώδη δευτερεύοντα τύπο any
. Το κλειστό σύνολο στοιχειωμένων τύπων που προέρχονται από τον τύπο any
είναι το εξής:
type null
, το οποίο ταξινομεί την τιμή null.type logical
, το οποίο ταξινομεί τις τιμές true και false.type number
, το οποίο ταξινομεί τις αριθμητικές τιμές.type time
, το οποίο ταξινομεί τις τιμές ώρας.type date
, το οποίο ταξινομεί τις τιμές ημερομηνίας.type datetime
, το οποίο ταξινομεί τις τιμές ημερομηνίας/ώρας.type datetimezone
, το οποίο ταξινομεί τις τιμές ζώνης ημερομηνίας/ώρας.type duration
, το οποίο ταξινομεί τις τιμές διάρκειας.type text
, το οποίο ταξινομεί τις τιμές κειμένου.type binary
, το οποίο ταξινομεί τις δυαδικές τιμές.type type
, το οποίο ταξινομεί τις τιμές τύπου.type list
, το οποίο ταξινομεί τις τιμές λίστας.type record
, το οποίο ταξινομεί τις τιμές εγγραφής.type table
, το οποίο ταξινομεί τις τιμές πίνακα.type function
, το οποίο ταξινομεί τις τιμές συναρτήσεων.type anynonnull
, το οποίο ταξινομεί όλες τις τιμές, εξαιρώντας την τιμή null.type none
, το οποίο δεν ταξινομεί τιμές.
Ο τύπος any
είναι αφηρημένος, ταξινομεί όλες τις τιμές στην M και όλοι οι τύποι στην M είναι συμβατοί με any
το . Οι μεταβλητές τύπου any
μπορούν να συνδεθούν με όλες τις πιθανές τιμές. Εφόσον η any
είναι αφηρημένη, δεν μπορεί να αποδοθεί σε τιμές , δηλαδή, καμία τιμή δεν είναι απευθείας τύπου any
.
Κάθε τιμή που είναι μια λίστα συμμορφώνεται με τον εγγενή τύπο , ο list
οποίος δεν θέτει περιορισμούς στα στοιχεία μέσα σε μια τιμή λίστας.
τύπος-λίστας:
{
τύπος-στοιχείου }
τύπος-στοιχείου:
δακτυλογραφώ
Το αποτέλεσμα της αξιολόγησης ενός τύπου-λίστας είναι μια τιμή τύπου λίστας της οποίας ο βασικός τύπος είναι list
.
Τα παρακάτω παραδείγματα απεικονίζουν τη σύνταξη για τη δήλωση ομοιογενών τύπων λίστας:
type { number } // list of numbers type
{ record } // list of records type
{{ text }} // list of lists of text values
Μια τιμή συμμορφώνεται με έναν τύπο λίστας εάν η τιμή είναι μια λίστα και κάθε στοιχείο σε αυτήν την τιμή λίστας συμμορφώνεται με τον τύπο στοιχείου του τύπου λίστας.
Ο τύπος στοιχείου ενός τύπου λίστας υποδεικνύει μια δέσμευση: όλα τα στοιχεία μιας λίστας συμμόρφωσης συμμορφώνονται με τον τύπο στοιχείου.
Κάθε τιμή που είναι μια εγγραφή συμμορφώνεται με τον εγγενή τύπο εγγραφής, ο οποίος δεν θέτει περιορισμούς στα ονόματα πεδίων ή τις τιμές μέσα σε μια τιμή εγγραφής. Μια τιμή τύπου-εγγραφής χρησιμοποιείται για τον περιορισμό του συνόλου έγκυρων ονομάτων, καθώς και των τύπων τιμών που επιτρέπεται να συσχετίζονται με αυτά τα ονόματα.
τύπος-εγγραφής:
[
δείκτης-ανοιχτής εγγραφής ]
[
επιλογή λίστας-προδιαγραφών-πεδίου ]
[
λίστα-προδιαγραφών-πεδίου, δείκτης-ανοικτής-εγγραφής ]
λίστα-προδιαγραφών-πεδίου:
προδιαγραφή πεδίου
προδιαγραφή-πεδίου ,
λίστα-προδιαγραφών-πεδίου
προδιαγραφή-πεδίου:
optional
προαγράψτε το όνομα-πεδίου επιλογή προδιαγραφής-τύπου-πεδίου
προδιαγραφή-τύπου-πεδίου:
=
τύπος-πεδίου
τύπος-πεδίου:
type
δείκτης-ανοιχτής-εγγραφής:
...
Το αποτέλεσμα της αξιολόγησης ενός τύπου-εγγραφής είναι μια τιμή τύπου της οποίας ο βασικός τύπος είναι record
.
Τα παρακάτω παραδείγματα απεικονίζουν τη σύνταξη για τη δήλωση τύπων εγγραφών:
type [ X = number, Y = number]
type [ Name = text, Age = number ]
type [ Title = text, optional Description = text ]
type [ Name = text, ... ]
Οι τύποι εγγραφών είναι κλειστοί από προεπιλογή, πράγμα που σημαίνει ότι δεν επιτρέπεται η παρουσία πρόσθετων πεδίων στη λίστα-προδιαγραφών πεδίων σε συμβατές τιμές. Η συμπερίληψη του δείκτη-ανοιχτής-εγγραφής στον τύπο εγγραφής δηλώνει τον τύπο ως ανοιχτό, ο οποίος επιτρέπει τα πεδία που δεν υπάρχουν στη λίστα προδιαγραφών πεδίου. Οι παρακάτω δύο παραστάσεις είναι ισοδύναμες:
type record // primitive type classifying all records
type [ ... ] // custom type classifying all records
Μια τιμή συμμορφώνεται με έναν τύπο εγγραφής εάν η τιμή είναι μια εγγραφή και ικανοποιείται κάθε προδιαγραφή πεδίου στον τύπο εγγραφής. Μια προδιαγραφή πεδίου ικανοποιείται εάν ισχύει οποιοδήποτε από τα παρακάτω:
Ένα όνομα πεδίου που αντιστοιχεί στο αναγνωριστικό της προδιαγραφής υπάρχει στην εγγραφή και η συσχετισμένη τιμή συμμορφώνεται με τον τύπο της προδιαγραφής
Η προδιαγραφή επισημαίνεται ως προαιρετική και δεν βρέθηκε αντίστοιχο όνομα πεδίου στην εγγραφή
Μια τιμή συμμόρφωσης μπορεί να περιέχει ονόματα πεδίων που δεν παρατίθενται στη λίστα προδιαγραφών πεδίου εάν και μόνο εάν ο τύπος εγγραφής είναι ανοιχτός.
Οποιαδήποτε τιμή συνάρτησης συμμορφώνεται με τον στοιχειώδη τύπο function
, ο οποίος δεν θέτει περιορισμούς στους τύπους των τυπικών παραμέτρων της συνάρτησης ή στην τιμή που επιστρέφεται από τη συνάρτηση. Χρησιμοποιείται μια προσαρμοσμένη τιμή τύπου-συνάρτησης για την τοποθέτηση περιορισμών τύπου στις υπογραφές τιμών συναρτήσεων συμμόρφωσης.
τύπος-συνάρτησης:
function (
λίστα-προδιαγραφών-παραμέτρουπροαπαγράψτε )
τον τύπο-επιστροφής-συνάρτησης
λίστα-προδιαγραφών-παραμέτρου:
λίστα-απαιτούμενων-προδιαγραφών-παραμέτρων
λίστα-απαιτούμενων-προδιαγραφών-παραμέτρων λίστα-προαιρετικών-παραμέτρων ,
λίστα-προδιαγραφών-παραμέτρων
λίστα-προαιρετικών-προδιαγραφών-παραμέτρων
λίστα-απαιτούμενων-προδιαγραφών-παραμέτρων:
προδιαγραφή-απαιτούμενης-παραμέτρου
απαιτούμενη-παράμετρος-προδιαγραφή ,
απαιτούμενη-παράμετρος λίστα-προδιαγραφών-παραμέτρων
προδιαγραφή-απαιτούμενης-παραμέτρου:
προδιαγραφή-παραμέτρου
λίστα-προαιρετικών-προδιαγραφών-παραμέτρων:
προδιαγραφή-προαιρετικής-παραμέτρου
προδιαγραφή-προαιρετικών-παραμέτρων ,
λίστα-προαιρετικών-παραμέτρων λίστα-προδιαγραφών
προδιαγραφή-προαιρετικής-παραμέτρου:
optional
προδιαγραφή-παραμέτρου
προδιαγραφή-παραμέτρου:
όνομα-παραμέτρου τύπος-παραμέτρου
τύπος-επιστροφής-συνάρτησης:
assertion
βεβαίωση:
as
στοιχειώδης-τύπος που επιδέχεται τιμές null
Το αποτέλεσμα της αξιολόγησης ενός τύπου-συνάρτησης είναι μια τιμή τύπου της οποίας ο βασικός τύπος είναι function
.
Τα παρακάτω παραδείγματα απεικονίζουν τη σύνταξη για τη δήλωση τύπων συναρτήσεων:
type function (x as text) as number
type function (y as number, optional z as text) as any
Μια τιμή συνάρτησης συμμορφώνεται με έναν τύπο συνάρτησης εάν ο τύπος επιστροφής της τιμής συνάρτησης είναι συμβατός με τον τύπο επιστροφής του τύπου συνάρτησης και κάθε προδιαγραφή παραμέτρου του τύπου συνάρτησης είναι συμβατή με την αντίστοιχη τυπική παράμετρο της συνάρτησης. Μια προδιαγραφή παραμέτρου είναι συμβατή με μια τυπική παράμετρο εάν ο καθορισμένος τύπος-τύπου-παραμέτρου είναι συμβατός με τον τύπο της τυπικής παραμέτρου και η προδιαγραφή της παραμέτρου είναι προαιρετική εάν η τυπική παράμετρος είναι προαιρετική.
Τα ονόματα των τυπικών παραμέτρων παραβλέπονται για σκοπούς προσδιορισμού της συμμόρφωσης τύπου συνάρτησης.
Ο καθορισμός μιας παραμέτρου ως προαιρετικού κάνει τον τύπο της να επιδέχεται τιμές null. Τα παρακάτω δημιουργούν πανομοιότυπους τύπους συναρτήσεων:
type function (optional x as text) as any
type function (optional x as nullable text) as any
Μια τιμή-τύπου-πίνακα χρησιμοποιείται για τον ορισμό της δομής μιας τιμής πίνακα.
τύπος-πίνακα:
table
τύπος-γραμμής
τύπος-γραμμής:
[
επιλογή λίστας-προδιαγραφών-πεδίου ]
Το αποτέλεσμα της αξιολόγησης ενός τύπου-πίνακα είναι μια τιμή τύπου της οποίας ο βασικός τύπος είναι table
.
Ο τύπος γραμμής ενός πίνακα καθορίζει τα ονόματα των στηλών και των τύπων στηλών του πίνακα ως τύπου κλειστής εγγραφής. Έτσι, ώστε όλες οι τιμές πίνακα συμμορφώνονται με τον τύπο table
, ο τύπος γραμμής του είναι ο τύπος record
(ο τύπος κενής ανοικτής εγγραφής). Επομένως, ο πίνακας τύπων είναι αφηρημένος, καθώς καμία τιμή πίνακα δεν μπορεί να έχει τύπο γραμμής του τύπου table
(αλλά όλες οι τιμές πίνακα έχουν τύπο γραμμής που είναι συμβατός με τον τύπο γραμμής του τύπου table
). Το παρακάτω παράδειγμα δείχνει την κατασκευή ενός τύπου πίνακα:
type table [A = text, B = number, C = binary]
// a table type with three columns named A, B, and C
// of column types text, number, and binary, respectively
Μια τιμή τύπου-πίνακα περιλαμβάνει επίσης τον ορισμό των κλειδιών μιας τιμής πίνακα. Ένα κλειδί είναι ένα σύνολο ονομάτων στηλών. Το πολύ ένα κλειδί μπορεί να οριστεί ως πρωτεύον κλειδί του πίνακα. (Εντός της M, τα κλειδιά πίνακα δεν έχουν σημασιολογικό νόημα. Ωστόσο, είναι σύνηθες για εξωτερικές προελεύσεις δεδομένων, όπως βάσεις δεδομένων ή τροφοδοσίες OData, να ορίζουν κλειδιά σε πίνακες. Το Power Query χρησιμοποιεί βασικές πληροφορίες για τη βελτίωση της απόδοσης των προηγμένων λειτουργιών, όπως οι λειτουργίες σύνδεσης μεταξύ προελεύσεων.)
Οι τυπικές συναρτήσεις Type.TableKeys
βιβλιοθήκης , Type.AddTableKey
και Type.ReplaceTableKeys
μπορούν να χρησιμοποιηθούν για την απόκτηση των κλειδιών ενός τύπου πίνακα, την προσθήκη ενός κλειδιού σε έναν τύπο πίνακα και την αντικατάσταση όλων των κλειδιών ενός τύπου πίνακα, αντίστοιχα.
Type.AddTableKey(tableType, {"A", "B"}, false)
// add a non-primary key that combines values from columns A and B
Type.ReplaceTableKeys(tableType, {})
// returns type value with all keys removed
Για οποιοδήποτε type T
, μπορεί να δημιουργηθεί μια παραλλαγή που επιδέχεται τιμές null χρησιμοποιώντας τύπο-που επιδέχεται τιμή null:
τύπος-που επιδέχεται τιμές null:
nullable
δακτυλογραφώ
Το αποτέλεσμα είναι ένας αφηρημένος τύπος που επιτρέπει τιμές τύπου T ή την τιμή null
.
42 is nullable number // true null is
nullable number // true
Η επιγραφή του type nullable
T μειώνεται στην επιγραφή του ή type
του type null
T. (Θυμηθείτε ότι οι τύποι που επιδέχονται τιμές null είναι αφηρημένοι και καμία τιμή δεν μπορεί να είναι απευθείας αφηρημένου τύπου.)
Value.Type(42 as nullable number) // type number
Value.Type(null as nullable number) // type null
Οι τυπικές συναρτήσεις Type.IsNullable
βιβλιοθήκης και Type.NonNullable
μπορούν να χρησιμοποιηθούν για τη δοκιμή ενός τύπου για την τιμή null και για την κατάργηση της τιμής null από έναν τύπο.
Η ακόλουθη δέσμευση (για οποιαδήποτε type T
):
type T
είναι συμβατό μεtype nullable T
Type.NonNullable(type T)
είναι συμβατό μεtype T
Τα παρακάτω είναι ισοδύναμα ανά ζεύγη (για οποιαδήποτε type T
):
type nullable any
any
Type.NonNullable(type any)
type anynonnull
type nullable none
type null
Type.NonNullable(type null)
type none
type nullable nullable T
type nullable T
Type.NonNullable(Type.NonNullable(type T))
Type.NonNullable(type T)
Type.NonNullable(type nullable T)
Type.NonNullable(type T)
type nullable (Type.NonNullable(type T))
type nullable T
Ο αποτιμούμενος τύπος μιας τιμής είναι ο τύπος στον οποίο δηλώνεται η συμμόρφωση μιας τιμής.
Μια τιμή μπορεί να αποδοθεί σε έναν τύπο χρησιμοποιώντας τη συνάρτηση Value.ReplaceType
βιβλιοθήκης . Αυτή η συνάρτηση είτε επιστρέφει μια νέα τιμή με τον απογραφικό τύπο είτε εμφανίζει σφάλμα εάν ο νέος τύπος δεν είναι συμβατός με την τιμή.
Όταν μια τιμή αποδίδεται σε έναν τύπο, εμφανίζεται μόνο ένας περιορισμένος έλεγχος συμμόρφωσης:
- Ο τύπος που αποδίδεται πρέπει να είναι μη αφηρημένος, χωρίς δυνατότητα null και συμβατός με τον εγγενή (εγγενή) αρχικό τύπο της τιμής.
- Όταν αποδίδεται ένας προσαρμοσμένος τύπος που ορίζει τη δομή, πρέπει να συμφωνεί με τη δομή της τιμής.
- Για εγγραφές: Ο τύπος πρέπει να κλείσει, πρέπει να ορίσει τον ίδιο αριθμό πεδίων με την τιμή και δεν πρέπει να περιέχει προαιρετικά πεδία. (Τα ονόματα πεδίων και οι τύποι πεδίων του τύπου θα αντικαταστήσουν αυτά που σχετίζονται τη συγκεκριμένη στιγμή με την εγγραφή. Ωστόσο, οι υπάρχουσες τιμές πεδίων δεν θα ελεγχθούν σε σχέση με τους νέους τύπους πεδίων.)
- Για πίνακες: Ο τύπος πρέπει να ορίζει τον ίδιο αριθμό στηλών με την τιμή. (Τα ονόματα στηλών και οι τύποι στηλών του τύπου θα αντικαταστήσουν αυτά που σχετίζονται αυτήν τη στιγμή με τον πίνακα. Ωστόσο, οι υπάρχουσες τιμές στήλης δεν θα ελεγχθούν σε σχέση με τους νέους τύπους στηλών.)
- Για συναρτήσεις: Ο τύπος πρέπει να ορίζει τον ίδιο αριθμό απαιτούμενων παραμέτρων, καθώς και τον ίδιο αριθμό προαιρετικών παραμέτρων, όπως η τιμή. (Η παράμετρος του τύπου και οι διεκδικήσεις επιστροφής, καθώς και τα ονόματα των παραμέτρων του, θα αντικαταστήσουν εκείνες που σχετίζονται με τον τρέχοντα τύπο της τιμής συνάρτησης. Ωστόσο, οι νέες διεκδικήσεις δεν θα έχουν καμία επίδραση στην πραγματική συμπεριφορά της συνάρτησης.)
- Για λίστες: Η τιμή πρέπει να είναι μια λίστα. (Ωστόσο, τα υπάρχοντα στοιχεία λίστας δεν θα ελεγχθούν σε σχέση με τον νέο τύπο στοιχείου.)
Οι συναρτήσεις βιβλιοθήκης μπορούν να υπολογίσουν και αποδήσουν σύνθετους τύπους στα αποτελέσματα με βάση τους τύπους των τιμών εισόδου που έχουν αποδοθεί.
Ο τύπος τιμής που αποδίδεται μπορεί να ληφθεί με χρήση της συνάρτησης Value.Type
βιβλιοθήκης . Για παράδειγμα:
Value.Type( Value.ReplaceType( {1}, type {number} )
// type {number}
Η ισοδυναμία τύπου δεν ορίζεται στην M. Μια υλοποίηση M μπορεί προαιρετικά να επιλέξει να χρησιμοποιήσει τους δικούς της κανόνες για την εκτέλεση συγκρίσεων ισότητας μεταξύ τιμών τύπου. Η σύγκριση δύο τιμών τύπου για ισότητα θα πρέπει να true
αξιολογείται εάν θεωρούνται πανομοιότυπες από την υλοποίηση και false
σε διαφορετική περίπτωση. Σε κάθε περίπτωση, η απόκριση που επιστρέφεται πρέπει να είναι συνεπής εάν συγκρίνονται επανειλημμένα οι ίδιες δύο τιμές. Σημειώστε ότι σε μια δεδομένη υλοποίηση, η σύγκριση ορισμένων πανομοιότυπων τιμών τύπου (όπως (type text) = (type text)
) μπορεί να επιστρέψει , ενώ η σύγκριση άλλων (όπως (type [a = text]) = (type [a = text])
) ενδέχεται να μην είναιtrue
.
Η συμβατότητα μεταξύ ενός συγκεκριμένου τύπου και ενός στοιχειώδη τύπου που επιδέχεται τιμές null μπορεί να προσδιοριστεί με χρήση της συνάρτησης Type.Is
βιβλιοθήκης , η οποία αποδέχεται μια αυθαίρετη τιμή τύπου ως το πρώτο της όρισμα και μια τιμή στοιχειώδη τύπου που επιδέχεται τιμές null ως το δεύτερο όρισμα:
Type.Is(type text, type nullable text) // true
Type.Is(type nullable text, type text) // false
Type.Is(type number, type text) // false
Type.Is(type [a=any], type record) // true
Type.Is(type [a=any], type list) // false
Δεν υπάρχει υποστήριξη στην M για τον προσδιορισμό της συμβατότητας ενός συγκεκριμένου τύπου με έναν προσαρμοσμένο τύπο.
Η τυπική βιβλιοθήκη περιλαμβάνει μια συλλογή συναρτήσεων για την εξαγωγή των χαρακτηριστικών ορισμού από έναν προσαρμοσμένο τύπο, επομένως, οι συγκεκριμένες δοκιμές συμβατότητας μπορούν να υλοποιηθούν ως παραστάσεις M. Ακολουθούν ορισμένα παραδείγματα. συμβουλευτείτε την προδιαγραφή βιβλιοθήκης M για πλήρεις λεπτομέρειες.
Type.ListItem( type {number} )
// type number
Type.NonNullable( type nullable text )
// type text
Type.RecordFields( type [A=text, B=time] )
// [ A = [Type = type text, Optional = false],
// B = [Type = type time, Optional = false] ]
Type.TableRow( type table [X=number, Y=date] )
// type [X = number, Y = date]
Type.FunctionParameters(
type function (x as number, optional y as text) as number)
// [ x = type number, y = type nullable text ]
Type.FunctionRequiredParameters(
type function (x as number, optional y as text) as number)
// 1
Type.FunctionReturn(
type function (x as number, optional y as text) as number)
// type number