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)调用记录构造函数进行赋值。