gpt4 book ai didi

delphi - 传递记录参数而不首先将其声明为变量

转载 作者:行者123 更新时间:2023-12-03 14:34:08 26 4
gpt4 key购买 nike

如果我尝试调用一个以记录类型(而不是对象)作为参数的过程,是否可以以某种方式“内联”传递该参数的详细信息,而不必先声明该类型的变量?

例如假设我有这个简单的记录类型:

type TMyRecord = record
AString: string;
AnInt: Integer;
end;

以及此过程声明:

procedure MyProcedure(Rec: TMyRecord);

如果我想调用 MyProcedure,我是否必须声明 TMyRecord 类型的变量,或者我可以执行以下操作:

MyProcedure(TMyRecord("Test", 10));

这不起作用(XE2)(得到一个关于它期望“)”的编译器错误)。

那么,我可以做这样的事情吗?或者不可能。

谢谢

最佳答案

可以使用高级记录结构。

有关高级记录的更多信息,请参阅 Records (advanced) section在 Delphi 帮助中。

这是一个小原型(prototype),用于了解在您的情况下如何在函数/过程调用中预初始化记录:

Type
TRecord = record
AString : String;
AnInt : Integer;
Constructor Create( Const s : String; i : Integer);
end;

constructor TRecord.Create(const s: String; i: Integer);
begin
AString := s;
AnInt := i;
end;

procedure DoSomething( theRec : TRecord);
begin
WriteLn(theRec.AString, ' ',theRec.AnInt);
end;

begin
DoSomeThing( TRecord.Create('S',1));
ReadLn;
end.

查看 Delphi RTL,请参阅单元 system.types (XE2) 中记录类型 TPointTRect 的定义。它们定义了一些重载的 Create 构造函数,这些构造函数在很多地方用于在函数/过程调用中预初始化记录结构。

关于delphi - 传递记录参数而不首先将其声明为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com