如果我尝试调用一个具有记录类型(而不是对象)作为参数的过程,是否可以以某种方式传递参数“inline”的详细信息,而不必首先声明该类型的变量?
例如假设我有这个简单的记录类型:
type TMyRecord = record AString: string; AnInt: Integer; end;
和这个程序声明:
procedure MyProcedure(Rec: TMyRecord);
如果我想调用MyProcedure,我必须声明一个类型为TMyRecord的变量,或者我可以这样做:
MyProcedure(TMyRecord("Test",10));
这不起作用(XE2)(得到一个编译器错误,它期待一个“)”)。
那么,我可以这样做吗?或不可能。
谢谢
解决方法
可以使用先进的记录结构。
有关高级记录的更多信息,请参阅Delphi帮助中的Records (advanced) section。
这是一个小原型,可以看到它在您的情况下如何在函数/过程调用中预先初始化记录:
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)中记录类型TPoint和TRect的定义。它们定义了一些重载的Create构造函数,这些构造函数在很多地方使用,可以在函数/过程调用中预先初始化记录结构。