Delphi 初始化常量记录数组
Delphi Initialize Const Array Of Record
有谁知道是否可以初始化记录常量数组?
procedure TForm1.Button1Click( Sender: TObject );
type
TMyRec = record
A: Integer;
end;
const
MyArray: TArray< TMyRec > = [ ?, ?, ? ];
begin
end;
谢谢!
每当你有关于Delphi的问题时,官方文档应该是你第一个访问的地方。
在这种情况下,结合Array Constants and Record Constants部分的知识,我们意识到以下语法是有效的:
type
TMyRec = record
A, B: Integer;
end;
const
MyArray: array[0..2] of TMyRec =
(
(A: 1; B: 5),
(A: 2; B: 10),
(A: 3; B: 15)
);
一开始题目说的是静态数组,但是它的提示TArray<TMyRec>
其实是动态数组。根据定义,TArray<T> = array of T
.
从 Delphi XE7 开始,您 可以 创建动态数组类型常量,只要元素的类型足够简单即可:
const
A: TArray<Integer> = [11, 22, 33];
S: TArray<string> = ['alpha', 'beta', 'gamma'];
从 Delphi 10.3 开始,您甚至可以进行 inline 常量声明,在这种情况下,RHS 甚至可以依赖于运行时函数。但这些与“真正的”常数相去甚远。将它们视为只读(或分配一次)变量:
begin
const MyArray: TArray<TPoint> = [Point(1, 5), Point(2, 10), Point(3, 15)];
因此,如果您创建一个创建记录的函数(可能是一个记录构造函数),您可以使用内联常量声明来创建记录的此类常量动态数组:
type
TMyRec = record
A, B: Integer;
end;
function MyRec(A, B: Integer): TMyRec;
begin
Result.A := A;
Result.B := B;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
const MyArray: TArray<TMyRec> = [MyRec(1, 5), MyRec(2, 10), MyRec(3, 15)];
end;
如果你愿意放弃一些类型兼容性,你也可以使用类型推断:
procedure TForm1.FormCreate(Sender: TObject);
begin
const MyArray = [MyRec(1, 5), MyRec(2, 10), MyRec(3, 15)];
end;
有谁知道是否可以初始化记录常量数组?
procedure TForm1.Button1Click( Sender: TObject );
type
TMyRec = record
A: Integer;
end;
const
MyArray: TArray< TMyRec > = [ ?, ?, ? ];
begin
end;
谢谢!
每当你有关于Delphi的问题时,官方文档应该是你第一个访问的地方。
在这种情况下,结合Array Constants and Record Constants部分的知识,我们意识到以下语法是有效的:
type
TMyRec = record
A, B: Integer;
end;
const
MyArray: array[0..2] of TMyRec =
(
(A: 1; B: 5),
(A: 2; B: 10),
(A: 3; B: 15)
);
一开始题目说的是静态数组,但是它的提示TArray<TMyRec>
其实是动态数组。根据定义,TArray<T> = array of T
.
从 Delphi XE7 开始,您 可以 创建动态数组类型常量,只要元素的类型足够简单即可:
const
A: TArray<Integer> = [11, 22, 33];
S: TArray<string> = ['alpha', 'beta', 'gamma'];
从 Delphi 10.3 开始,您甚至可以进行 inline 常量声明,在这种情况下,RHS 甚至可以依赖于运行时函数。但这些与“真正的”常数相去甚远。将它们视为只读(或分配一次)变量:
begin
const MyArray: TArray<TPoint> = [Point(1, 5), Point(2, 10), Point(3, 15)];
因此,如果您创建一个创建记录的函数(可能是一个记录构造函数),您可以使用内联常量声明来创建记录的此类常量动态数组:
type
TMyRec = record
A, B: Integer;
end;
function MyRec(A, B: Integer): TMyRec;
begin
Result.A := A;
Result.B := B;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
const MyArray: TArray<TMyRec> = [MyRec(1, 5), MyRec(2, 10), MyRec(3, 15)];
end;
如果你愿意放弃一些类型兼容性,你也可以使用类型推断:
procedure TForm1.FormCreate(Sender: TObject);
begin
const MyArray = [MyRec(1, 5), MyRec(2, 10), MyRec(3, 15)];
end;