加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:13:40 所属栏目:大数据 来源:网络整理
导读:如果我尝试调用一个具有记录类型(而不是对象)作为参数的过程,是否可以以某种方式传递参数“inline”的详细信息,而不必首先声明该类型的变量? 例如假设我有这个简单的记录类型: type TMyRecord = record AString: string; AnInt: Integer;end; 和这个程序
如果我尝试调用一个具有记录类型(而不是对象)作为参数的过程,是否可以以某种方式传递参数“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构造函数,这些构造函数在很多地方使用,可以在函数/过程调用中预先初始化记录结构。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读