Szakaszok

A szakaszdokumentum egy M program, amely több elnevezett kifejezésből áll.

szakasz-dokumentum:
      section
Szakasz:
      literal-attributesopt
sectionsection-name;section-members opt
szakasz neve:
      Azonosító
szakasztagok:
      a szakasztagok szekciótagok választhatnak
szakasztag:
      literal-attributesoptsharedsection-member-name expression
=;
section-member-name:
      Azonosító

Az M-ben a szakasz egy szervezeti fogalom, amely lehetővé teszi a kapcsolódó kifejezések elnevezését és csoportosítását egy dokumentumon belül. Minden szakasznak van egy szakaszneve, amely azonosítja a szakaszt, és minősíti a szakaszon belül deklarált szakasztagok nevét. A szakasztagok egy tagnévből és egy kifejezésből állnak. A szakasztagkifejezések közvetlenül tagnév alapján hivatkozhatnak az ugyanabban a szakaszban lévő többi szakasztagra.

Az alábbi példa egy szakaszdokumentumot mutat be:

section Section1; 

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

A szakasztagkifejezések más szakaszokban található szakasztagokra hivatkozhatnak egy szakaszelérési kifejezéssel, amely minősíti a szakasztag nevét az azt tartalmazó szakasz nevével.

section-access-expression:
      azonosító
!azonosítója

Az alábbi példa két olyan dokumentumkészletet mutat be, amelyek kölcsönösen hivatkozó szakaszokat tartalmaznak:

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

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

A szakasztagok opcionálisan deklarálhatók olyankéntshared, amely kihagyja a szakasz-hozzáférés-kifejezés használatának követelményét, amikor a szakaszon kívüli megosztott tagokra hivatkozik. A külső szakaszok megosztott tagjaira a nem minősített tagnév hivatkozhat mindaddig, amíg a hivatkozó szakaszban nem deklarálják ugyanahhoz a névhez tartozó tagot, és egyetlen másik szakasz sem rendelkezik hasonló nevű megosztott taggal.

Az alábbi példa a megosztott tagok viselkedését szemlélteti, amikor ugyanazon dokumentumcsoport egyes szakaszaiban használják:

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

A különböző szakaszokban azonos nevű megosztott tag definiálása érvényes globális környezetet eredményez, de a megosztott tag elérésekor hiba lép fel.

section Section1; 
shared A = 1; 

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

A szakaszdokumentumok egy csoportjának kiértékelésekor a következők a következők:

  • Minden szakasznévnek egyedinek kell lennie a globális környezetben.

  • Egy szakaszon belül minden szakasztagnak egyedi tagnévvel kell rendelkeznie.

  • Egynél több definícióval rendelkező megosztott szakasztagok hibát jeleznek a megosztott tag elérésekor.

  • A szakasztag kifejezésösszetevőjét nem lehet kiértékelni a szakasztag elérése előtt.

  • A szakasztag kifejezésösszetevőjének kiértékelése során felmerülő hibák a szakasztaghoz vannak társítva a kifelé propagálás előtt, majd a szakasztag minden egyes elérésekor újra felmerülnek.

Dokumentum csatolása

Az M szakaszdokumentumok halmaza olyan átlátszatlan rekordértékhez csatolható, amely a szakaszdokumentumok megosztott tagonként egy mezőjét tartalmazza. Ha a megosztott tagok neve nem egyértelmű, hibaüzenet jelenik meg.

Az eredményként kapott rekordérték teljes mértékben bezárul azon a globális környezetben, amelyben a csatolási folyamatot végrehajtották. Az ilyen rekordok ezért alkalmasak M-dokumentumok más (csatolt) M-dokumentumokból való írására. Az ütközések elnevezésére nincs lehetőség.

A standard kódtárfüggvények Embedded.Value olyan "beágyazott" rekordértékek lekérésére használhatók, amelyek megfelelnek az újrafelhasznált M-összetevőknek.

Dokumentumbetekintés

Az M programozott hozzáférést biztosít a globális környezethez a kulcsszavak és #shared a #sections kulcsszavak használatával.

#sections

A #sections belső változó rekordként adja vissza a globális környezet összes szakaszát. Ezt a rekordot szakasznév határozza meg, és minden érték a megfelelő szakasznak a szakasztag nevével indexelt rekordképe.

Az alábbi példa egy dokumentumot mutat be, amely két szakaszból és az adott dokumentum kontextusában lévő belső változó kiértékelésével #sections létrehozott rekordból áll:

section Section1; 
A = 1; 
B = 2;  

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

A kiértékelés #sectionssorán a következők a következők:

  • A #sections belső változó megőrzi a dokumentum összes szakasztagkifejezésének kiértékelési állapotát.
  • A #sections belső változó nem kényszeríti a nem értékelt szakasztagok kiértékelését.

#shared

A #shared belső változó rekordként adja vissza a globális környezet tartalmát. (A globális környezet az összes megosztott szakasztagból, valamint a kifejezésértékelő által a globális környezetbe közvetlenül belefoglalt azonosítókból áll.) Ezt a rekordot azonosítónév határozza meg, és mindegyik érték a társított azonosító értéke.

Az alábbi példa egy két megosztott taggal rendelkező dokumentumot és a megfelelő rekordot mutatja be a belső változónak a #shared dokumentum kontextusában történő kiértékelésével:

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

A kiértékelés #sharedsorán a következők a következők:

  • A #shared belső változó megőrzi a globális környezet kiértékelési állapotát.

  • A #shared belső változó nem kényszeríti a nem értékelt értékek kiértékelését.