甲部分文档是M的程序,由多个名为表达式。
section-document:
section
section:
文字属性opt section
section-name ;
section-members opt
section-name:
标识符
section-members:
section-member section-members opt
section-member:
文字属性opt shared
opt section-member-name =
expression ;
section -成员名称:
标识符
在 M 中,节是一个组织概念,它允许在文档中对相关表达式进行命名和分组。每个部分都有一个section-name,它标识该部分并限定在该部分中声明的部分成员的名称。甲sectionmember由一个的成员名和表达。节成员表达式可以通过成员名直接引用同一节内的其他节成员。
以下示例显示了一个部分文档:
复制
代码语言:javascript复制section Section1;
A = 1; //1
B = 2; //2
C = A B; //3
节成员表达式可以通过section-access-expression引用位于其他节中的节成员,该表达式用包含节的名称限定节成员名称。
section-access-expression:
标识符 !
标识符
以下示例显示了一组包含相互引用的部分的两个文档:
复制
代码语言:javascript复制section Section1;
A = "Hello"; //"Hello"
B = 1 Section2!A; //3
section Section2;
A = 2; //2
B = Section1!A & " world!"; /"Hello, world"
节成员可以选择声明为shared
,这样在引用包含节之外的共享成员时就不需要使用节访问表达式。外部节中的共享成员可以用它们的非限定成员名引用,只要在引用节中没有声明同名的成员,并且没有其他节具有同名共享成员。
以下示例说明了共享成员在同一组文档中跨节使用时的行为:
复制
代码语言:javascript复制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
在不同的部分定义一个同名的共享成员会产生一个有效的全局环境,但是访问共享成员会在访问时引发错误。
复制
代码语言:javascript复制section Section1;
shared A = 1;
section Section2;
shared A = "Hello";
section Section3;
B = A; //Error: shared member A has multiple definitions
在评估一组部分文档时,以下内容成立:
- 每个部分名称在全局环境中必须是唯一的。
- 在一个部分内,每个部分成员必须有一个唯一的部分成员名称。
- 访问共享成员时,具有多个定义的共享节成员会引发错误。
- 一个表达组件部构件的部分构件被访问之前,必须不进行评估。
- 在评估部分成员的表达式组件时引发的错误在向外传播之前与该部分成员相关联,然后在每次访问该部分成员时重新引发。
文件链接
一组 M 节文档可以链接到一个不透明的记录值,每个节文档的共享成员都有一个字段。如果共享成员的名称不明确,则会引发错误。
结果记录值在执行链接过程的全局环境中完全关闭。因此,这些记录是从其他(链接的)M 个文档集组成 M 个文档的合适组件。没有命名冲突的机会。
标准库函数Embedded.Value
可用于检索对应于重用 M 组件的此类“嵌入”记录值。
文件自省
M 通过#sections
和#shared
关键字提供对全局环境的编程访问。
#sections
的#sections
内在变量返回地球环境作为记录中的所有部分。该记录以部分名称为键,每个值都是由部分成员名称索引的相应部分的记录表示。
以下示例显示了一个由两个部分组成的文档,以及通过#sections
在该文档的上下文中评估内在变量而生成的记录:
复制
代码语言:javascript复制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
内在变量不会强迫任何未计算部分成员的评价。