2013-07-31 55 views
2

某些函数需要一个变量来发送一个值。但有时候我不需要这个值,也不想定义一个变量来使用它作为函数out参数。就像这样:旁路函数“out”参数

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

我想安全地执行这样的:

test; 

回答

5

您可以创建一个包装:

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

注意:您还必须标注其他版本overload,或者你可以打电话给你的包装test以外的东西,并删除overload

另一种选择:(你单位的顶部,也许)某处声明一个虚拟变量:

var 
    DummyStr : string; 

那么你没有你想调用的函数每次来声明一个新的变量。

test(DummyStr); 
+0

这是唯一的办法? IDK可以使用'nil'或其他东西而不是变量吗? – SAMPro

+0

不怕。如果某个过程指定了输出参数,则必须提供该参数。 – Blorgbeard

+0

添加了另一个选项.. – Blorgbeard

2

使用指针:

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

test; 

var 
    s: string; 

test(@s); 
+0

有一些系统函数具有'out'参数,我正在寻找它们的解决方案。我认为一个包装(@Blorgbeard)是唯一的解决方案(如果我不想使用全局变量)。谢谢 – SAMPro

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); 
+0

我认为它是在2006年推出的,而不是在2005年推出的 – OnTheFly