传递一个可选的布尔变量

awm*_*oss 9 delphi

有时我们想要一个可选参数

function doSomething(foo:Integer; bar:TObject=nil)
begin
    if bar <> nil then // do something optional with bar
    ....
end
Run Code Online (Sandbox Code Playgroud)

如何使用布尔值来执行等效操作,这允许我区分两个布尔值和"无值"?

function doSomething(foo:Integer; bar:Boolean=nil) // Won't compile
begin
    if bar <> nil then // do something optional with bar
end
Run Code Online (Sandbox Code Playgroud)

显然这不会编译为布尔不能为零.

基本上,我想要一个具有三种可能状态的参数; 真,假或"未指明".

Ser*_*lyk 18

您可以使用重载以其他方式执行此操作:

function doSomething(foo:Integer): Boolean; overload;
begin
  // do something without bar
end;

function doSomething(foo:Integer; bar:Boolean): Boolean; overload
begin
  // do something optional with bar
end;
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它doSomething(1),以及doSomething(1, true)

使用您的示例,它将等同于:

function doSomething(foo:Integer; bar:Boolean=nil): Boolean; // Won't compile
begin
    if bar <> nil then 
      // do something optional with bar
    else
      // do something without bar
end;
Run Code Online (Sandbox Code Playgroud)