Jaa


Osat

Osa-asiakirja on M-ohjelma, joka koostuu useista nimetyistä lausekkeista.

section-document:
      osa
osa:
      literal-attributesopt
sectionsection-name;section-members opt
section-name:
      tunniste
section-members:
      section-member section-membersopt
section-member:
      literal-attributesoptsharedsection-member-name expression
= ;
section-member-name:
      tunniste

Osassa M osa on organisaatiokäsite, joka sallii liittyvien lausekkeiden nimeämisen ja ryhmittelyn asiakirjassa. Kullakin osalla on section-name-nimi, joka tunnistaa osan ja määrittää osan sisältämät section-members-jäsenet . section-member koostuu member-name-nimestä ja lausekkeesta. Osan jäsenlausekkeet voivat viitata muihin saman osan jäseniin samassa osassa suoraan jäsenen nimellä.

Seuraavassa esimerkissä on section-document:

section Section1; 

A = 1;                          //1
B = 2;                          //2 
C = A + B;                      //3

Osan jäsenlausekkeet voivat viitata muissa osissa sijaitseviin osan jäseniin section-access-expression-lausekkeen avulla, joka määrittää osan jäsenen nimen sisältävän osan nimen.

section-access-expression:
      tunniste
! tunniste

Seuraavassa esimerkissä näkyy kahden asiakirjan joukko, jotka sisältävät molempiin viittaavien osien joukon:

section Section1; 
A = "Hello";                    //"Hello" 
B = 1 + Section2!A;             //3

section Section2; 
A = 2;                          //2 
B = Section1!A & " world!";     //"Hello, world"

Osan jäsenten määrittelyksi sharedvoidaan valinnaisesti määrittää , mikä jättää pois vaatimuksen käyttää section-access-expression-lauseketta viitattaessa jaettuihin jäseniin sisältävän osan ulkopuolella. Ulkoisten osien jaettuja jäseniä voidaan kutsua niiden tarkentamattomalla jäsenen nimellä, kunhan mitään samannimistä jäsentä ei ole esitelty viittaavassa osassa, eikä millään muulla osalla ole samannimistä jaettua jäsentä.

Seuraavassa esimerkissä havainnollistetaan jaettujen jäsenten toimintaa, kun niitä käytetään samassa asiakirjajoukossa olevien osien välillä:

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

Sellaisen jaetun jäsenen määrittäminen, jolla on sama nimi eri osissa, tuottaa kelvollisen yleisen ympäristön, mutta jaetun jäsenen käyttäminen aiheuttaa virheen, kun sitä käytetään.

section Section1; 
shared A = 1; 

section Section2; 
shared A = "Hello"; 
 
section Section3; 
B = A;    //Error: shared member A has multiple definitions

Seuraava pätee, kun arvioidaan section-documents-joukkoa:

  • Jokaisen osan nimen on oltava yksilöivä yleisessä ympäristössä.

  • Osassa jokaisella section-member-jäsenillä on oltava yksilöivä section-member-name-nimi.

  • Jaetun osan jäsenet, joilla on useampi kuin yksi määritys, aiheuttaa virheen, kun jaettua jäsentä käytetään.

  • section-member-lausekekomponenttia ei saa arvioida, ennen kuin osan jäsentä käytetään.

  • Virheet, jotka on esitetty, kun section-member-lausekekomponentti on arvioitu, liittyvät kyseiseen osan jäseneseen ennen ulospäin tapahtuvaa välittämistä ja käynnistetään uudelleen aina, kun osan jäsentä käytetään.

Asiakirjan linkitys

M-osan asiakirjat voidaan linkittää läpinäkymättömään tietuearvoon, jossa on yksi kenttä osion asiakirjojen jaettua jäsentä kohden. Jos jaetuista jäsenistä on moniselitteisiä nimiä, esiin tulee virhe.

Tulokseksi saatava tietuearvo suljetaan kokonaan sen yleisen ympäristön mukaan, jossa linkkiprosessi suoritettiin. Tällaiset tietueet ovat siis sopivia komponentteja M-asiakirjojen kirjoittamiseen muista (linkitetyistä) M-asiakirjoista. Mahdollisuuksia nimeämisristiriitoihin ei ole.

Vakiokirjastofunktioita Embedded.Value voidaan käyttää tällaisten upotettujen tietuearvojen noutamiseen, jotka vastaavat käytettyjä M-osia.

Asiakirjan itsetutkiskelu

M tarjoaa ohjelmallisen käyttöoikeuden yleiseen ympäristöön avainsanojen ja #shared avulla#sections.

#sections

Luontainen #sections muuttuja palauttaa kaikki yleisen ympäristön osat tietueena. Tämä tietue on kirjoitettu osan nimen perusteella, ja kukin arvo on vastaavan osan jäsenen tietue-esitys indeksoituna osan jäsenen nimen mukaan.

Seuraavassa esimerkissä näytetään asiakirja, joka koostuu kahdesta osasta ja tietueesta, joka on tuotettu arvioimalla #sections sisäinen muuttuja kyseisen asiakirjan yhteydessä:

section Section1; 
A = 1; 
B = 2;  

section Section2;
C = "Hello"; 
D = "world"; 
 
#sections 
//[ 
//  Section1 = [ A = 1, B = 2], 
//  Section2 = [ C = "Hello", D = "world" ] 
//] 

Seuraava pätee, kun arvioidaan #sections:

  • Sisäinen #sections muuttuja säilyttää kaikkien osan jäsenlausekkeiden arviointitilan asiakirjassa.
  • Luontainen #sections muuttuja ei pakota arvioimaan minkään arvioimattoman osan jäseniä.

#shared

Luontainen #shared muuttuja palauttaa yleisen ympäristön sisällön tietueena. (Yleinen ympäristö koostuu kaikista jaetuista osan jäsenistä sekä kaikista tunnisteista, jotka lausekkeen arvioija sisällyttää suoraan yleiseen ympäristöön.) Tämä tietue on merkitty tunnisteen nimellä, ja kukin arvo on liittyvän tunnisteen arvo.

Seuraavassa esimerkissä näytetään asiakirja, jossa on kaksi jaettua jäsentä ja vastaava tietue, joka on tuotettu arvioimalla #shared sisäinen muuttuja kyseisen asiakirjan yhteydessä:

section Section1;
shared A = 1; 
B = 2; 
 
Section Section2;
C = "Hello";
shared D = "world"; 
 
//[ 
//  A = 1, 
//  D = "world" 
//] 

Seuraava pätee, kun arvioidaan #shared:

  • Luontainen #shared muuttuja säilyttää yleisen ympäristön arviointitilan.

  • Luontainen #shared muuttuja ei pakota arvioimaan mitään arvioimatonta arvoa.