Bölümler

Bölüm belgesi, birden çok adlandırılmış ifadeden oluşan bir M programıdır.

section-document:
      section
Bölüm:
      değişmez-değer öznitelikleri,
sectionbölüm-adı;bölüm-üyelerini seç
bölüm adı:
      identifier
bölüm üyeleri:
      section-member section-membersopt
section-member:
      değişmez-değer-özniteliklerioptsharedopt section-member-name ifadesi
=;
section-member-name:
      Tanımlayıcı

M'de bölüm, ilgili ifadelerin bir belge içinde adlandırılmasına ve gruplandırılmasına olanak tanıyan bir kuruluş kavramıdır. Her bölümün, bölümü tanımlayan ve bölümün içinde bildirilen bölüm üyelerinin adlarını niteleyen bir bölüm adı vardır. Bölüm üyesi birüye-adından ve bir ifadeden oluşur. Bölüm üyesi ifadeleri, aynı bölümdeki diğer bölüm üyelerine doğrudan üye adına göre başvurabilir.

Aşağıdaki örnekte bir bölüm belgesi gösterilmektedir:

section Section1; 

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

Bölüm üyesi ifadeleri, bölüm üyesi adını içeren bölümün adıyla niteleyen bölüm-erişim-ifadesi yoluyla diğer bölümlerde bulunan bölüm üyelerine başvurabilir.

section-access-expression:
      tanımlayıcı tanımlayıcısı
!

Aşağıdaki örnekte, karşılıklı bilgi veren bölümler içeren iki belge kümesi gösterilmektedir:

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

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

Bölüm üyeleri isteğe bağlı olarak olarak olarak sharedbildirilebilir ve bu da içeren bölümün dışındaki paylaşılan üyelere başvururken section-access-expression kullanma gereksinimini atlar. Dış bölümlerdeki paylaşılan üyelere, başvuruda bulunan bölümde aynı ada sahip üye bildirilmemesi ve başka hiçbir bölümün benzer adlı bir paylaşılan üyeye sahip olmaması sürece, nitelenmemiş üye adları ile başvurulabilir.

Aşağıdaki örnekte, paylaşılan üyelerin aynı belge kümesi içindeki bölümler arasında kullanıldığındaki davranışı gösterilmektedir:

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

Farklı bölümlerde aynı ada sahip bir paylaşılan üyenin tanımlanması geçerli bir genel ortam oluşturur, ancak paylaşılan üyeye erişildiğinde hata oluşur.

section Section1; 
shared A = 1; 

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

Bir bölüm belgesi kümesi değerlendirilirken aşağıdakiler geçerli olur:

  • Her bölüm adı genel ortamda benzersiz olmalıdır.

  • Bir bölüm içinde, her bölüm üyesinin benzersiz bir bölüm-üyesi-adı olmalıdır.

  • Birden fazla tanımı olan paylaşılan bölüm üyeleri, paylaşılan üyeye erişildiğinde hataya neden olur.

  • Bölüm üyesine erişilmeden önce bölüm üyesinin ifade bileşeni değerlendirilmemelidir.

  • Bölüm üyesinin ifade bileşeni değerlendirilirken oluşan hatalar, dışarı yayılmadan önce bu bölüm üyesiyle ilişkilendirilir ve bölüm üyesine her erişildiğinde yeniden oluşturulur.

Belge Bağlama

M bölümü belgeleri kümesi, bölüm belgelerinin paylaşılan üyesi başına bir alan içeren opak bir kayıt değerine bağlanabilir. Paylaşılan üyelerin adları belirsizse bir hata oluşur.

Sonuçta elde edilen kayıt değeri, bağlantı işleminin gerçekleştirildiği genel ortama göre tamamen kapanır. Bu nedenle bu tür kayıtlar, diğer (bağlantılı) M belge kümelerinden M belgeleri oluşturmak için uygun bileşenlerdir. Adlandırma çakışmaları için fırsat yoktur.

Standart kitaplık işlevleri Embedded.Value , yeniden kullanılan M bileşenlerine karşılık gelen bu tür "eklenmiş" kayıt değerlerini almak için kullanılabilir.

Belge İçe Dönük

M, ve #shared anahtar sözcükleri aracılığıyla #sections genel ortama programlı erişim sağlar.

#sections

İç değişken, #sections genel ortamdaki tüm bölümleri kayıt olarak döndürür. Bu kayıt bölüm adına göre anahtarlanır ve her değer, bölüm üyesi adına göre dizine alınan ilgili bölümün kayıt gösterimidir.

Aşağıdaki örnekte, iki bölümden oluşan bir belge ve bu belge bağlamında iç değişken değerlendirilerek #sections oluşturulan kayıt gösterilmektedir:

section Section1; 
A = 1; 
B = 2;  

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

değerlendirilirken #sectionsaşağıdakiler geçerli olur:

  • İç #sections değişken, belgedeki tüm bölüm üyesi ifadelerinin değerlendirme durumunu korur.
  • İç #sections değişken, değerlendirilmemiş bölüm üyelerinin değerlendirilmesini zorlamaz.

#shared

İç değişken, #shared genel ortamın içeriğini kayıt olarak döndürür. (Genel ortam, tüm paylaşılan bölüm üyelerinin yanı sıra ifade değerlendiricisi tarafından doğrudan genel ortama dahil edilen tüm tanımlayıcılardan oluşur.) Bu kayıt tanımlayıcı adına göre anahtarlanır ve her değer ilişkili tanımlayıcının değeridir.

Aşağıdaki örnekte, iki paylaşılan üyeye sahip bir belge ve bu belge bağlamında iç değişken değerlendirilerek #shared oluşturulan ilgili kayıt gösterilmektedir:

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

değerlendirilirken #sharedaşağıdakiler geçerli olur:

  • İç #shared değişken, genel ortamın değerlendirme durumunu korur.

  • İç #shared değişken, değerlendirilmemiş değerlerin değerlendirilmesini zorlamaz.