Zitat:
Allerdings ist das auch noch blöd, wegen der zwingend nötigen params-Variable. Die will man ja möglichst auch noch loswerden.
Du kannst einem Record auch eine statische Class-Funktion, bzw. einen Constuctor verpassen.
[add]
Delphi-Quellcode:
type
TParams = record
//class function Create: TParams; static;
constructor Create;
function Default: TParams;
function paramA(i: Integer): TParams;
function paramB(i: Integer): TParams;
function ParamList: TParams;
private
paramAValue: Integer;
paramBValue: Integer;
end;
constructor TParams.Create;
begin
Default;
end;
function TParams.Default: TParams;
begin
Finalize(Self);
FillChar(@Self, SizeOf(Self), 0);
Result := Self;
end;
function TParams.paramA(i: Integer): TParams;
begin
paramAValue := i;
Result := Self;
end;
function TParams.paramB(i: Integer): TParams;
begin
paramBValue := i;
Result := Self;
end;
function TParams.ParamList: TParams;
begin
Result := Self;
end;
Oder das Ganze als Interface.
Als Interface wäre es Speichersparender.
Also Objekt ginge zwar auch, aber da darf man dann das Freigeben nicht vergessen, welches bei einigen Aufrufvarianten unmöglich/schwer zu realisieren ist.
Delphi-Quellcode:
foo(TParams.Create.paramA(1).paramB(9));
var Params: TParams;
Params.Default; // oder Params := TParams.Create;
Params.paramA(1);
Params.paramB(9);
foo(Params);
with TParams.Create do begin
paramA(1);
paramB(9);
foo(ParamList);
end;
with TParams.Create do begin
paramA(1);
//foo(ParamList.paramB(9));
foo(paramB(9));
end;