与类相关的不同风格的属性声明之间的根本区别是什么?例如来自文档
CLASS Team;
wins(team) = DATA INTEGER(Team);
ties(team) = DATA INTEGER(Team);
并来自实际的模块代码
CLASS Region;
name = DATA STRING[100] (Region);
regCode = DATA STRING[3] (Region);
为什么在第一种情况下是wins(team),为什么在第二种情况下没有参数?
简短的回答
在这种情况下,使用 operator 设置属性时
DATA,名称后括号中的参数列表没有任何作用,因为 operatorDATA不会以任何方式使用这些参数,并且参数类是在 operator 本身中定义的。可以指定参数列表以提高代码的可读性或统一性。例如,这是一个属性声明:有时可以提供比
扩展答案
让我们稍微了解一下指令中的参数列表 =
在属性运算符中有一组与上下文无关的运算符:这些运算符包括
DATA、、FORMULA某些形式的运算符GROUP等。这些运算符不以任何方式使用参数列表,它们本身必然定义参数类(签名)财产。当用这些语句声明属性时,参数列表通常可以省略,因为它不携带任何附加信息。使用上下文相关运算符声明属性时,参数列表也可能完全不存在。然后参数的数量、它们的名称和类将完全由 = 指令的右侧确定,该指令由表达式给出。例如:
在这种情况下,属性参数将从语句的右侧开始计算,并按照它们在表达式中出现的顺序。所以上面的声明相当于
如果指定了参数列表(当使用右侧的表达式时),则它定义属性参数及其类。每个参数都有一个名称,可以在 = 语句的右侧访问它。建议显式指定参数列表,因为它允许您及早检测属性声明中的拼写错误或错误。
指定参数类是可选的(类只能在参数第一次出现时指定),但建议使用。同样重要的是要了解属性参数类在稍后搜索属性时使用,即选择最合适的属性,以及在形成属性的规范名称时,但指定参数类不会隐式添加检查因为在计算时属于这个类,所以如果需要,显然需要添加这样的检查。