Record类型定义¶
本书的前些章节,我们介绍了model
类型的定义概念。虽然目前为止我们还没有看到任何其他的类型,Modelica语言其实还包括record
类型。像model
类型一样,record
类型可以有自己的变量,但是不允许包含方程。record
类型主要用于数据的分组。但是,在下面的标注章节中你会发现它们在描述与标注相关的数据时也非常有用。
语法¶
record
类型的定义看起来基本上类似于model
类型,只是不包含任何的方程:
record RecordName "Description of the record"
// Declarations for record variables
end RecordName;
像model
定义那样,类型定义的开始和结束都会带有所定义的record
类型名称。对所定义的record
类型的说明以字符串的形式紧跟类型名的后面。与record
类型相关联的所有变量都在record
类型定义内声明。
以下是record
类型定义方面的实例:
record Vector "A vector in 3D space"
Real x;
Real y;
Real z;
end Vector;
record Complex "Representation of a complex number"
Real re "Real component";
Real im "Imaginary component";
end Complex;
Record类型的构造函数¶
现在,我们已经知道了如何定义一个record
类型。那应该如何创建record
类型呢?如果我们想声明一个变量,恰巧这个变量属于record
类型,变量声明的本身就会创建一个record
类型实例,而且我们还可以通过修改语句指定record
类型内的变量值,例如:
parameter Vector v(x=1.0, y=2.0, z=0.0);
但在某些情况下,我们可能希望创建一个record
类型而不是一个变量(例如,在表达式中使用,作为参数传递给函数或者在修改功能中使用)。对每个record
类型定义,都会自动生成与record
类型名称完全相同的函数名。这个函数称为“记录构造函数”。记录构造函数输入与record
类型内部定义相匹配的变量,并返回一个record
类型实例。所以,在上述Vector
定义实例中,我们也可以通过记录构造函数初始化parameter
变量,如下所示:
parameter Vector v = Vector(x=1.0, y=2.0, z=0.0);
在这种情况下,变量v
的值通过表达式Vector(x=1.0, y=2.0, z=0.0)
调用记录构造函数进行赋值。