3

有些函数需要一个变量来发送一个值。但有时我不需要该值,也不想定义变量以将其用作函数out参数。像这样:

procedure test(out SomeVar: string);
begin
   //...
end;

我想安全地执行这个:

test; 
4

3 回答 3

6

您可以创建一个包装器:

procedure test(); overload;
var
    SomeVar : string;
begin
    test(SomeVar);
end;

注意:您还必须用 标记其他版本overload,或者您可以将包装器称为 之外的其他内容test,然后删除overload.

另一种选择:在某处声明一个虚拟变量(可能在单元的顶部):

var 
  DummyStr : string;

这样就不必每次要调用该函数时都声明一个新变量。

test(DummyStr);
于 2013-07-31T04:25:04.577 回答
3

您可以重载该过程:

procedure test(out SomeVar: string); overload;
begin
   //...
end;

procedure test; overload; inline;
var dummy: string;
begin
  test(dummy);
end;

注意inline关键字,自 Delphi 2005 AFAIR 起可用。

我通常做的是使用指针而不是out参数:

procedure test(SomeVarP: PString=nil); 
begin
   if SomeVarP<>nil then
     SomeVarP^ := ....
end;

因此,您可以使用:

var s: string;

test;
test(@s);
于 2013-07-31T06:41:59.077 回答
2

使用指针:

procedure test(SomeVar: PString = nil);
begin
  if SomeVal <> nil then SomeVar^ := '';
  //...
  if SomeVal <> nil then SomeVar^ := ...;
end;

test; 

var
  s: string;

test(@s); 
于 2013-07-31T06:38:59.183 回答