有没有办法像在 C 和 C++ 中那样对 Delphi 记录执行聚合赋值? 即是否有以下等效语法:
struct silly { int x; int y; };
// ...
silly s = { 4, 5 };
用于德尔福?
最佳答案
不,没有确切的等价物。但是,您可以做一些类似的事情。
例如,如果
type
TTestRecord = record
A, B, C: integer;
D, E, F: boolean;
end;
和
var
R1, R2: TTestRecord;
那么你可以做
R1 := R2;
因此,您可以按值将一条记录分配给另一条记录。但是您不能在代码中指定“记录文字”。然而,非常接近它的情况很常见:如果你这样做
function TestRecord(A, B, C: integer; D, E, F: boolean): TTestRecord;
begin
result.A := A;
result.B := B;
result.C := C;
result.D := D;
result.E := E;
result.F := F;
end;
然后你就可以写了
R1 := TestRecord(1, 2, 3, true, false, true)
例如,这就是您处理 TRect
和 TPoint
的方式。 Classes.pas
中有辅助函数Rect
和Point
。
旁白:在常量声明中,您可以做更多的事情:
const
R: TTestRecord = (A: 1; B: 2; C: 3; D: true; E: false; F: true);
关于c - Delphi记录: can we do aggregate assignment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111535/