我想知道这是否可以在Delphi中使用(或者如果它有一个干净的方法):
type
TSomething = record
X, Y : Integer;
end;
GetSomething( x, y )
- >返回带有这些值的记录。
...然后你有TSomething
作为参数的这个函数,你想把它默认为
function Foo( Something : TSomething = GetSomething( 1, 3 );
编译器在这里发出错误,但我不确定是否有办法绕过它!
可以这样做吗?
答案 0 :(得分:10)
使用重载:
procedure Foo(const ASomething: TSomething); overload;
begin
// do something with ASomething
end;
procedure Foo; overload;
begin
Foo(GetSomething(1, 3));
end;
答案 1 :(得分:3)
使用类而不是记录和某些这样做:
TSomething = class
public
X: integer;
Y: integer
end;
procedure Foo(Something: TSomething = nil);
begin
if (Something = nil) then
Something := GetSomething(1, 3);
...
end;
答案 2 :(得分:3)
最简单的方法是使用重载过程:
program TestOverloading;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TSomething = record
X,Y : integer;
end;
const
cDefaultSomething : TSomething = (X:100; Y:200);
procedure Foo(aSomething : TSomething); overload;
begin
writeln('X:',aSomething.X);
writeln('Y:',aSomething.Y);
end;
procedure Foo; overload;
begin
Foo(cDefaultSomething);
end;
begin
Foo;
readln;
end.
答案 3 :(得分:0)
如果使用指针而不是记录类型,则可以使用nil
作为默认值:
type
TSomething = record
X, Y : Integer;
end;
PSomething = ^TSomething;
function Foo(Something: PSomething = nil);
实际上,将指针作为参数传递通常会更快,因为它可以避免复制内存块。