有时我们想要一个可选参数
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)