假设我在一个单元中有一个简单的记录,例如:
TVector2D = record
public
class function New(const x, y: Accuracy): TVector2D; static;
public
x, y: Accuracy;
end;
然后我在使用上述记录集构建的同一单元中有第二条记录,例如:
TMatrix3D = record
public
class function New(const row1, row2, row3: TVector3D): TMatrix3D; static;
public
Index : array [0..2] of TVector3D;
end;
然后我按如下方式定义轴方向常数:
//Unit vector constants
const
iHat : TVector3D = (x: 1; y: 0; z: 0);
jHat : TVector3D = (x: 0; y: 1; z: 0);
kHat : TVector3D = (x: 0; y: 0; z: 1);
我现在想要使用上面的常量来定义另一个常量,例如:
identity : TMatrix3D = (row1: iHat; row2: jHat; row3: kHat);
然而上述尝试并不奏效。我将如何在Delphi XE2中执行此操作?
非常感谢您的努力。 : - )
答案 0 :(得分:11)
那是不可能的。在常量记录声明中,成员值必须为constant expressions。也就是说,您不能像尝试那样使用类型化常量。
documentation这样说,我强调:
记录常量
要声明记录常量,请指定每个字段的值 - 如 fieldName:value,字段分配用分号分隔 - 在声明结尾的括号中。值必须是 由常量表达式表示。
所以你需要这样声明:
const
identity: TMatrix3D = (Index:
((x: 1; y: 0; z: 0),
(x: 0; y: 1; z: 0),
(x: 0; y: 0; z: 1))
);
感到沮丧,不得不重复自己,但这是我能怀疑的最好的事情。