某些函数需要一个变量来发送一个值。但有时候我不需要这个值,也不想定义一个变量来使用它作为函数out
参数。就像这样:旁路函数“out”参数
procedure test(out SomeVar: string);
begin
//...
end;
我想安全地执行这样的:
test;
某些函数需要一个变量来发送一个值。但有时候我不需要这个值,也不想定义一个变量来使用它作为函数out
参数。就像这样:旁路函数“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(SomeVar: PString = nil);
begin
if SomeVal <> nil then SomeVar^ := '';
//...
if SomeVal <> nil then SomeVar^ := ...;
end;
test;
var
s: string;
test(@s);
有一些系统函数具有'out'参数,我正在寻找它们的解决方案。我认为一个包装(@Blorgbeard)是唯一的解决方案(如果我不想使用全局变量)。谢谢 – SAMPro
可以重载的过程:
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);
我认为它是在2006年推出的,而不是在2005年推出的 – OnTheFly
这是唯一的办法? IDK可以使用'nil'或其他东西而不是变量吗? – SAMPro
不怕。如果某个过程指定了输出参数,则必须提供该参数。 – Blorgbeard
添加了另一个选项.. – Blorgbeard