在Delphi中跳过默认参数

时间:2011-01-13 15:48:37

标签: delphi

有没有办法跳过默认参数,假设我的方法声明是这样的:

procedure MyProc1(var isAttr1: Boolean = FALSE;
    var isAttr2: Boolean = FALSE; var isAttr3: Boolean = FALSE);

我不能这样调用这个函数:

Self.MyProc1( , , Attr3);

因为我不想要不必要的var声明,同时我想要最后一个param返回值(它是一个var类型)

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:15)

抱歉,你不能这样做。更有甚者,你不能使用var参数作为isAttr1的默认参数。

如果您的参数具有足够不同的参数类型,那么您可以使用overloaded methods作为默认参数的替代方法,这是我个人更喜欢的技术。但是你的参数都是布尔值的,因此你不能在这里做到这一点。

其他海报提出了类似的建议:

procedure Myfunc1(var isAttr1, isAttr2, isAttr3: Boolean); overload;
procedure Myfunc1(var isAttr3: Boolean); overload;

这将编译和工作,但会违背最少惊喜的原则。对于像这样的重载过程,对于只有一个参数的过程,您可以期望该单个参数是具有多个参数的过程的第一个参数。换句话说,你会期望:

procedure Myfunc1(var isAttr1, isAttr2, isAttr3: Boolean); overload;
procedure Myfunc1(var isAttr1: Boolean); overload;

答案 1 :(得分:4)

在这种情况下,您应该使用overload指令:

  

Overload指令允许您   有不同版本的相同   命名函数或过程   不同的论点。

答案 2 :(得分:3)

是的,制作一个MyFunc1的重载版本(isAttr3:boolean = FALSE);过载;

让它组成虚拟参数并为你传递它们。

正如另一张海报所指出的,你可以用VAR做到这一点 另外,如果MyFunc不是函数,则将其称为MyFunc是错误的。称之为MyProc!

我的解决方案:

function ov(p1 : boolean; p2 : boolean; p3 : boolean) : boolean; overload;
begin
  result := p1 or p2 or p3;
end;

function ov(p3 : boolean) : boolean; overload;
begin
  result :=  ov(false, false, p3);
end;

现在您可以选择:

OV(TestBool3)

ov(TestBool1,TestBool2,TestBool3)