Använda en funktion eller en procedur som en parameter i en annan funktion

I Delphi, procedurtyper (metodpekare) låter dig behandla procedurer och funktioner som värden som kan tilldelas variabler eller skickas till andra procedurer och funktioner.

Så här kallar du en funktion (eller procedur) som en parameter för en annan funktion (eller procedur):

  1. Förklara funktionen (eller proceduren) som kommer att användas som en parameter. I exemplet nedan är detta "TFunctionParameter".
  2. Definiera en funktion som accepterar en annan funktion som en parameter. I exemplet nedan är detta "DynamicFunction"
 typ

    TFunctionParameter = fungera(const värde: heltal): sträng;

...
fungera Ett(const värde: heltal): sträng;Börja

    resultat: = IntToStr (värde);

 slutet;

fungera Två(const värde: heltal): sträng;Börja

    resultat: = IntToStr (2 * värde);

 slutet;

fungera DynamicFunction (f: TFunctionParameter): sträng;Börja

    resultat: = f (2006);

 slutet;

...
// Exempel på användning:

 

 var

    s: sträng;

 Börja

    s: = DynamicFunction (One);

    ShowMessage (s); // kommer att visa "2006"

 

    s: = DynamicFunction (Två);

    ShowMessage (s); // kommer att visa "4012"slutet; 

Viktiga anteckningar

  • Naturligtvis bestämmer du dig för signaturen på "TFunctionParameter": om det är en procedur eller en funktion, hur många parametrar tar det, etc..
  • Om "TFunctionParameter" är en metod (för ett instansobjekt) måste du lägga till orden av objekt till namnet på procedurtypen, som i: TFunctionParameter = funktion (const-värde: heltal): objektsträng;
  • Om du förväntar dig att "nil" ska anges som "f" -parameter, bör du testa för detta med funktionen Tilldelad.
  • Fixa "Inkompatibel typ: 'metodpekare och regelbunden procedur'"