ส่วน
section-document เป็นโปรแกรม M ที่ประกอบด้วยนิพจน์ที่มีชื่อหลายรายการ
section-document:
ตอน
ตอน:
literal-attributesoptsection
section-name;
section-members opt
section-name:
ตัวระบุ
section-members:
section-member section-membersopt
section-member:
literal-attributesoptshared
section-member-name expression=
;
section-member-name:
รหัส
ใน M ส่วน คือแนวคิดองค์กรที่อนุญาตให้มีการตั้งชื่อและจัดกลุ่มนิพจน์ที่เกี่ยวข้องภายในเอกสาร แต่ละส่วนมี section-name ซึ่งระบุส่วนและสร้างคุณสมบัติชื่อของ section-members ที่ประกาศภายในส่วน section-member ประกอบด้วย member-name และนิพจน์ นิพจน์สมาชิกของส่วนอาจอ้างอิงไปยังสมาชิกส่วนอื่น ๆ ภายในส่วนเดียวกันโดยตรงด้วยชื่อสมาชิก
ตัวอย่างต่อไปนี้แสดง section-document:
section Section1;
A = 1; //1
B = 2; //2
C = A + B; //3
นิพจน์สมาชิกของ ส่วนอาจอ้างอิงไปยังสมาชิกของส่วนที่อยู่ในส่วนอื่น ๆ โดยใช้ส่วน section-access-expression ซึ่งสร้างคุณสมบัติชื่อสมาชิกของส่วนที่มีชื่อของส่วนที่มีอยู่
section-access-expression:
ตัวระบุ !
ตัวอย่างต่อไปนี้แสดงชุดของเอกสารสองฉบับที่ประกอบด้วยส่วนที่มีการอ้างอิงซึ่งกันและกัน:
section Section1;
A = "Hello"; //"Hello"
B = 1 + Section2!A; //3
section Section2;
A = 2; //2
B = Section1!A & " world!"; //"Hello, world"
คุณอาจเลือกที่จะประกาศสมาชิกของส่วนเป็น shared
ตัดข้อกําหนดในการใช้ section-access-expression เมื่ออ้างอิงถึงสมาชิกที่ใช้ร่วมกันภายนอกส่วนที่มีอยู่ อาจมีการอ้างอิงสมาชิกที่ใช้ร่วมกันในส่วนภายนอกจากชื่อสมาชิกที่ไม่มีเงื่อนไขตราบใดที่ไม่มีการประกาศสมาชิกของชื่อเดียวกันในส่วนอ้างอิงและไม่มีส่วนอื่น ๆ ที่มีสมาชิกที่มีชื่อคล้ายกัน
ตัวอย่างต่อไปนี้แสดงลักษณะการทํางานของสมาชิกที่ใช้ร่วมกันเมื่อใช้ข้ามส่วนภายในชุดเอกสารเดียวกัน:
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
การกําหนดสมาชิกที่ใช้ร่วมกันที่มีชื่อเดียวกันในส่วนที่แตกต่างกันจะสร้างสภาพแวดล้อมส่วนกลางที่ถูกต้อง แต่การเข้าถึงสมาชิกที่ใช้ร่วมกันจะทําให้เกิดข้อผิดพลาดเมื่อเข้าถึง
section Section1;
shared A = 1;
section Section2;
shared A = "Hello";
section Section3;
B = A; //Error: shared member A has multiple definitions
รายการต่อไปนี้จะถูกระงับไว้ ขณะที่ประเมินชุด section-documents:
section-name แต่ละชื่อต้องไม่ซ้ํากันในสภาพแวดล้อมส่วนกลาง
ภายในส่วน section-member แต่ละตัวต้องมี section-member-name ที่ไม่ซ้ํากัน
สมาชิกของส่วนที่ใช้ร่วมกันที่มีข้อกําหนดมากกว่าหนึ่งรายการจะทําให้เกิดข้อผิดพลาดเมื่อมีการเข้าถึงสมาชิกที่ใช้ร่วมกัน
คอมโพเนนต์นิพจน์ของ section-member ต้องไม่ถูกประเมินก่อนเข้าถึงสมาชิกส่วน
มีข้อผิดพลาดเกิดขึ้นในขณะที่คอมโพเนนต์นิพจน์ของ section-member ถูกประเมินความสัมพันธ์กับสมาชิกส่วนนั้นก่อนที่จะเผยแพร่ออกไปภายนอก แล้วเกิดขึ้นใหม่ในแต่ละครั้งที่มีการเข้าถึงสมาชิกของส่วน
ชุดของเอกสารส่วน M สามารถเชื่อมโยงกับค่าเรกคอร์ดแบบทึบที่มีหนึ่งเขตข้อมูลต่อสมาชิกที่ใช้ร่วมกันของเอกสารส่วน ถ้าสมาชิกที่ใช้ร่วมกันมีชื่อที่ไม่ชัดเจน แสดงว่ามีข้อผิดพลาดเกิดขึ้น
ค่าเรกคอร์ดผลลัพธ์จะปิดอย่างสมบูรณ์ในสภาพแวดล้อมส่วนกลางซึ่งดําเนินการเชื่อมโยง ดังนั้นเรกคอร์ดดังกล่าวจึงเป็นคอมโพเนนต์ที่เหมาะสมในการเขียนเอกสาร M จากชุดเอกสาร M อื่น ๆ (ที่เชื่อมโยงกัน) ไม่มีโอกาสในการตั้งชื่อความขัดแย้ง
ฟังก์ชัน Embedded.Value
ไลบรารีมาตรฐานสามารถใช้เพื่อดึงค่าเรกคอร์ด "ฝัง" ดังกล่าวที่สอดคล้องกับคอมโพเนนต์ M ที่นํามาใช้ใหม่
M มีการเข้าถึงสภาพแวดล้อมส่วนกลางโดยใช้ #sections
คําสําคัญ และ #shared
ทางโปรแกรม
ตัวแปร #sections
อินทรินซิก ส่งกลับส่วนทั้งหมดภายในสภาพแวดล้อมส่วนกลางเป็นเรกคอร์ด เรกคอร์ดนี้ถูกคีย์โดยชื่อส่วนและแต่ละค่าเป็นการแทนค่าเรกคอร์ดของส่วนที่สอดคล้องกันซึ่งจัดทําดัชนีโดยชื่อสมาชิกของส่วน
ตัวอย่างต่อไปนี้แสดงเอกสารที่ประกอบด้วยสองส่วนและเรกคอร์ดที่สร้างขึ้นโดยการประเมิน #sections
ตัวแปรอินทรินซิก ภายในบริบทของเอกสารนั้น:
section Section1;
A = 1;
B = 2;
section Section2;
C = "Hello";
D = "world";
#sections
//[
// Section1 = [ A = 1, B = 2],
// Section2 = [ C = "Hello", D = "world" ]
//]
รายการต่อไปนี้จะถูกระงับไว้ขณะประเมิน #sections
:
- ตัวแปร
#sections
อินทรินซิก รักษาสถานะการประเมินของนิพจน์สมาชิกของส่วนทั้งหมดภายในเอกสาร - ตัวแปร
#sections
อินทรินซิก ไม่บังคับการประเมินผลสมาชิกส่วนที่ยังไม่ได้ประเมิน
ตัวแปร #shared
อินทรินซิก ส่งกลับเนื้อหาของสภาพแวดล้อมส่วนกลางเป็นเรกคอร์ด (สภาพแวดล้อมส่วนกลางประกอบด้วยสมาชิกของส่วนที่ใช้ร่วมกันทั้งหมด รวมถึงตัวระบุใด ๆ ที่รวมอยู่ในสภาพแวดล้อมส่วนกลางโดยตรงโดยตัวประเมินนิพจน์) เรกคอร์ดนี้ถูกคีย์โดยชื่อตัวระบุโดยแต่ละค่าเป็นค่าของตัวระบุที่เกี่ยวข้อง
ตัวอย่างต่อไปนี้แสดงเอกสารที่ประกอบด้วยสมาชิกที่ใช้ร่วมกันสองรายและเรกคอร์ดที่เกี่ยวข้องที่สร้างขึ้นโดยการประเมิน #shared
ตัวแปรอินทรินซิก ภายในบริบทของเอกสารนั้น:
section Section1;
shared A = 1;
B = 2;
Section Section2;
C = "Hello";
shared D = "world";
//[
// A = 1,
// D = "world"
//]
รายการต่อไปนี้จะถูกระงับไว้ขณะประเมิน #shared
:
ตัวแปร
#shared
อินทรินซิก รักษาสถานะการประเมินของสภาพแวดล้อมส่วนกลางตัวแปร
#shared
อินทรินซิก ไม่บังคับใช้การประเมินค่าที่ยังไม่ได้ประเมิน