有些函数需要一个变量来发送一个值。但有时我不需要该值,也不想定义变量以将其用作函数out
参数。像这样:
procedure test(out SomeVar: string);
begin
//...
end;
我想安全地执行这个:
test;
有些函数需要一个变量来发送一个值。但有时我不需要该值,也不想定义变量以将其用作函数out
参数。像这样:
procedure test(out SomeVar: string);
begin
//...
end;
我想安全地执行这个:
test;
您可以创建一个包装器:
procedure test(); overload;
var
SomeVar : string;
begin
test(SomeVar);
end;
注意:您还必须用 标记其他版本overload
,或者您可以将包装器称为 之外的其他内容test
,然后删除overload
.
另一种选择:在某处声明一个虚拟变量(可能在单元的顶部):
var
DummyStr : string;
这样就不必每次要调用该函数时都声明一个新变量。
test(DummyStr);
您可以重载该过程:
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);
使用指针:
procedure test(SomeVar: PString = nil);
begin
if SomeVal <> nil then SomeVar^ := '';
//...
if SomeVal <> nil then SomeVar^ := ...;
end;
test;
var
s: string;
test(@s);