use*_*073 4 delphi var procedures
Delphi 2010 - 我有一个例程,它接受一个字符串并处理它.有3种不同类型的处理,我可能需要任何组合,包括所有3种处理方式.我试图确定如何调用我的例程,但我尝试的一切都会导致问题.我想做的是调用这样的程序......
StringProcess(StartString1, VarProcess1, VarProcess2, VarProcess3);
Run Code Online (Sandbox Code Playgroud)
但它可能很容易就是这个我只想要2个进程
StringProcess(StartString1, '', VarProcess2, VarProcess3);
Run Code Online (Sandbox Code Playgroud)
程序定义类似于
procedure StringProcess(StartString: string; var S1:String; var S2:string; var S3:string);
Run Code Online (Sandbox Code Playgroud)
总而言之...如何定义我的过程以返回1到3个VAR变量?Delphi希望我总是传递3个变量,如果我不需要它,我只需要忽略它.有没有办法传递"不存在"的VAR参数,并根据需要忽略它们?
谢谢
问题在于,只要您尝试修改这些值,您的StringProcess
rountine就必须有变量来表示S1,S2和S3.毫无疑问,您不想经历为您不感兴趣的值声明变量的头痛问题.
要考虑的一个选项是将所有变量捆绑到记录结构中,如下所示:
type
TStringData = record
S1, S2, S3: string;
end;
procedure StringProcess(StartString: string; var StringData: TStringData);
Run Code Online (Sandbox Code Playgroud)
但是我会更进一步.我怀疑你并没有真正使用S1,S2和S3的输入StringProcess
.这意味着他们可能也成为了参数.在这种情况下,我宁愿建议你写:
function StringProcess(StartString: string): TStringData;
Run Code Online (Sandbox Code Playgroud)
一个var
参数不能是可选的,它必须通过一个变量.对于您要找的内容,请使用指针:
procedure StringProcess(StartString: string; S1:PString; S2:Pstring; S3:Pstring);
begin
...
if S1 <> nil then
begin
// Use S1^ as needed...
end;
...
end;
Run Code Online (Sandbox Code Playgroud)
然后你可以做这样的事情:
StringProcess(StartString1, @VarProcess1, @VarProcess2, @VarProcess3);
StringProcess(StartString1, nil, @VarProcess2, @VarProcess3);
StringProcess(StartString1, nil, nil, @VarProcess3);
StringProcess(StartString1, @VarProcess1, nil, @VarProcess3);
...
Run Code Online (Sandbox Code Playgroud)