使用随机顺序将参数值传递给Function或Procedure

时间:2015-09-21 05:35:57

标签: delphi

Delphi中是否有一种方法可以将参数值传递给具有随机顺序的Function或Procedure,所以我不必确保顺序正确。

示例:

procedure InsertEmp(ID: Integer;Name: String;Gender: String);
begin
  //Content
end

然后我会像这样使用这个程序:

InsertEmp(1,'Zemmy','Male');

但是如果在另一个时间我改变了这样的函数参数顺序:

procedure InsertEmp(ID: Integer;NickName:String;Name: String;Gender: String);
begin
  //Content
end

我必须对我的功能进行位置修正,如下所示:

InsertEmp(1,'Jim','Zemmy','Male');

我可以在不更正订单的情况下传递参数值吗?也许这样的方式:

InsertEmp(Gender = 'Male',NickName = 'Jim',ID = 1,Name = 'Zemmy');

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

您可以有多个overloaded procedures/functions参数略有不同。

procedure InsertEmp(id: Integer; name: String; gender: String); overload;
procedure InsertEmp(id: Integer; nickName,name: String; gender: String); overload;

对于随机参数顺序,有序列化库将字符串作为输入,然后解析它们以获取输入值。简单的键值对或JSON就是例子。

答案 1 :(得分:3)

有两个或多个相同类型的参数,被调用的过程无法确定它们的含义。

我认为答案可以是whosrdaddy's commentLU RD's answer的混合。

使用重载记录构造函数,您可以获得智能解决方案。

type
  TEmployee = record
    ID: Integer;
    NickName,
    Name,
    Gender: String;
    constructor Create(const AID: Integer; const ANickname, AName, AGender: String); overload;
    constructor Create(const AID: Integer; const AName, AGender: String); overload;
end;

procedure InsertEmp(const AEmployee: TEmployee);
begin
  //Content
end;

constructor TEmployee.Create(const AID: Integer; const ANickname, AName, AGender: String);
begin
  ID := AID;
  Nickname := ANickName
  Name := AName;
  Gender := AGender;
end;

constructor TEmployee.Create(const AID: Integer; const AName, AGender: String);
begin
  Create(AID, '', AName, AGender);
end;
var
  myEmployee: TEmployee;

begin
  myEmployee := TEmployee.Create(1, 'Zemmy', 'Male');
  InsertEmp(myEmployee);
  . . .
  myEmployee := TEmployee.Create(1, 'Jim', 'Zemmy', 'Male');
  InsertEmp(myEmployee);
end.   

答案 2 :(得分:0)

不,你不能。如果你想做类似的事情,你可以传递Key - Value格式的单个字符串

InsertEmp('Gender=Male,NickName=Jim,ID=1,Name=Zemmy');

然后在你的函数内解析它。

答案 3 :(得分:0)

如果只能使用一种变量类型,还有另一种选择。使用开放数组。声明

procedure InsertEmp(values: array of string);

并传递任何类似的参数

InsertEmp(['Gender = Male', 'NickName = Jim', 'Name = Zemmy' ...]);