Delphi - 使用可选的VAR参数调用过程?

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参数,并根据需要忽略它们?

谢谢

Dis*_*ned 9

问题在于,只要您尝试修改这些值,您的StringProcessrountine就必须有变量来表示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)


Rem*_*eau 8

一个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)