Hallo,
ich komme hier an einer Stelle nicht weiter. Ich verwende Lazarus in der aktuellen Version im Delphi-Modus.
Ich möchte gerne eine Prozedur mittels Übergabe einer Funktion als Parameter mehrfach verwenden.
Vom Prinzip her habe ich die Funktionsweise verstanden, leider scheint bei meiner Umsetzung noch ein Denkfehler drin zu sein:
Ich habe in der betroffenen Class eine Type-Definition:
type TFunctionParameter = function(const value1 : AnsiString; const value2 : AnsiString): boolean;
Diese wiederum benutze ich dann bei der Definition der Prozedur:
procedure Traverse(BaseDir: AnsiString; TargetDir: AnsiString; RelPath: AnsiString; _function: TFunctionParameter);
Innerhalb der Prozedur wird dann die übergebene Funktion _function mit Parametern aufgerufen.
Soweit, so gut.
Nun habe ich eine weitere Funktion, die ich als Funktions-Parameter übergeben möchte um damit die Prozedur "Traverse" aufzurufen:
function CopyIfNewer(Source: AnsiString; Target: AnsiString): boolean;
Wenn ich die Beispiele richtig verstanden habe, muss ich dazu nur den Funktionsnamen ohne Parameter übergeben:
Traverse('...', '...', '...', CopyIfNewer);
Hier meckert der Compiler dann aber:
Error: Incompatible type for arg no. 4: Got "TNovaUtils.TNovaUtils.CopyIfNewer(AnsiString,AnsiString):Boolean;", expected "TNovaUtils.<procedure variable type of function(const AnsiString,const AnsiString):Boolean;Register>"
Hint: Found declaration: TNovaUtils.Traverse(AnsiString,AnsiString,AnsiString,TFunctionParameter);
Meine Frage: Warum? Und wie macht man es richtig??
Danke!
