Inndelinger
Et inndelingsdokument er et M-program som består av flere navngitte uttrykk.
inndelingsdokument:
seksjon
seksjon:
literal-attributesoptsection
section-name;
section-members opt
inndelingsnavn:
identifikator
inndelingsmedlemmer:
section-member section-membersopt
inndelingsmedlem:
litteral-attributtervelger opt-section-member-name=
shared
expression ;
navn på inndelingsmedlem:
Identifikator
I M er en inndeling et organisasjonskonsept som gjør at relaterte uttrykk kan navngis og grupperes i et dokument. Hver inndeling har et inndelingsnavn, som identifiserer inndelingen og kvalifiserer navnene på inndelingsmedlemmene som er deklarert i inndelingen. Et inndelingsmedlem består av et medlemsnavn og et uttrykk. Inndelingsmedlemsuttrykk kan referere til andre inndelingsmedlemmer i samme inndeling direkte etter medlemsnavn.
Følgende eksempel viser et inndelingsdokument:
section Section1;
A = 1; //1
B = 2; //2
C = A + B; //3
Inndelingsmedlemsuttrykk kan referere til inndelingsmedlemmer som befinner seg i andre inndelinger ved hjelp av et inndelingstilgangsuttrykk, som kvalifiserer et medlemsnavn for inndelingen med navnet på den inneholdende inndelingen.
section-access-expression:
ID for !
identifikator
Følgende eksempel viser et sett med to dokumenter som inneholder inndelinger som er gjensidig referanse:
section Section1;
A = "Hello"; //"Hello"
B = 1 + Section2!A; //3
section Section2;
A = 2; //2
B = Section1!A & " world!"; //"Hello, world"
Inndelingsmedlemmer kan eventuelt deklareres som shared
, noe som utelater kravet om å bruke et inndelingstilgangsuttrykk når de refererer til delte medlemmer utenfor den inneholdende inndelingen. Delte medlemmer i eksterne inndelinger kan refereres til av deres ukvalifiserte medlemsnavn så lenge ingen medlemmer med samme navn er deklarert i referansedelen, og ingen annen inndeling har et delt medlem med samme navn.
Følgende eksempel illustrerer virkemåten til delte medlemmer når de brukes på tvers av inndelinger i samme sett med dokumenter:
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
Hvis du definerer et delt medlem med samme navn i ulike inndelinger, vil det gi et gyldig globalt miljø, men tilgang til det delte medlemmet vil oppstå en feil når det åpnes.
section Section1;
shared A = 1;
section Section2;
shared A = "Hello";
section Section3;
B = A; //Error: shared member A has multiple definitions
Følgende gjelder når du evaluerer et sett med inndelingsdokumenter:
Hvert inndelingsnavn må være unikt i det globale miljøet.
I en inndeling må hvert inndelingsmedlem ha et unikt inndelingsmedlemsnavn.
Delte inndelingsmedlemmer med mer enn én definisjon utløser en feil når det delte medlemmet åpnes.
Uttrykkskomponenten for et inndelingsmedlem må ikke evalueres før inndelingsmedlemmet åpnes.
Feil som oppstår mens uttrykkskomponenten for et inndelingsmedlem evalueres, er knyttet til det inndelingsmedlemmet før det overføres utover og deretter heves på nytt hver gang inndelingsmedlemmet åpnes.
Et sett med M-inndelingsdokumenter kan kobles til en ugjennomsiktig postverdi som har ett felt per delt medlem av inndelingsdokumentene. Hvis delte medlemmer har tvetydige navn, utløses en feil.
Den resulterende postverdien lukkes fullstendig over det globale miljøet der koblingsprosessen ble utført. Slike poster er derfor egnede komponenter for å skrive M-dokumenter fra andre (koblede) sett med M-dokumenter. Det finnes ingen muligheter for å navngi konflikter.
Standard bibliotekfunksjoner Embedded.Value
kan brukes til å hente slike innebygde postverdier som tilsvarer gjenbrukte M-komponenter.
M gir programmatisk tilgang til det globale miljøet ved hjelp av #sections
nøkkelordene og #shared
.
Den #sections
innebygde variabelen returnerer alle inndelinger i det globale miljøet som en post. Denne posten er tastet inn etter inndelingsnavn, og hver verdi er en postpresentasjon av den tilsvarende inndelingen indeksert etter inndelingsmedlemsnavn.
Følgende eksempel viser et dokument som består av to inndelinger og posten som produseres ved å evaluere den #sections
innebygde variabelen i konteksten til dokumentet:
section Section1;
A = 1;
B = 2;
section Section2;
C = "Hello";
D = "world";
#sections
//[
// Section1 = [ A = 1, B = 2],
// Section2 = [ C = "Hello", D = "world" ]
//]
Følgende gjelder når du evaluerer #sections
:
- Den
#sections
innebygde variabelen bevarer evalueringstilstanden for alle delmedlemsuttrykkene i dokumentet. - Den
#sections
innebygde variabelen tvinger ikke evalueringen av noen ikke-evaluerte inndelingsmedlemmer.
Den #shared
innebygde variabelen returnerer innholdet i det globale miljøet som en post. (Det globale miljøet består av alle delte inndelingsmedlemmer samt eventuelle identifikatorer som er direkte inkludert i det globale miljøet av uttrykksevaluatoren.) Denne posten er tastet inn med identifikatornavn, der hver verdi er verdien for den tilknyttede identifikatoren.
Følgende eksempel viser et dokument med to delte medlemmer og den tilsvarende posten som produseres ved å evaluere den #shared
innebygde variabelen i konteksten til dokumentet:
section Section1;
shared A = 1;
B = 2;
Section Section2;
C = "Hello";
shared D = "world";
//[
// A = 1,
// D = "world"
//]
Følgende gjelder når du evaluerer #shared
:
Den
#shared
innebygde variabelen bevarer evalueringstilstanden for det globale miljøet.Den
#shared
innebygde variabelen tvinger ikke evalueringen av noen uevalueringsverdi.