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');
感谢您的帮助。
答案 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 comment和LU 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' ...]);