Utilizarea unei funcții sau a unei proceduri ca parametru într-o altă funcție

În Delfi, tipuri procedurale (indicatoarele metodei) vă permit să tratați procedurile și funcțiile ca valori care pot fi atribuite variabilelor sau transmise altor proceduri și funcții.

Iată cum se numește o funcție (sau o procedură) ca parametru al altei funcții (sau proceduri):

  1. Declarați funcția (sau procedura) care va fi utilizată ca parametru. În exemplul de mai jos, acesta este "TFunctionParameter".
  2. Definiți o funcție care va accepta ca parametru o altă funcție. În exemplul de mai jos este "DynamicFunction"
 tip

    TFunctionParameter = funcţie(const valoare: număr întreg): şir;

...
funcţie Unu(const valoare: număr întreg): şir;începe

    rezultat: = IntToStr (valoare);

 Sfârșit;

funcţie Două(const valoare: număr întreg): şir;începe

    rezultat: = IntToStr (valoare 2 *);

 Sfârșit;

funcţie DynamicFunction (f: TFunctionParameter): şir;începe

    rezultat: = f (2006);

 Sfârșit;

...
// Exemplu de utilizare:

 

 var

    s: șir;

 începe

    s: = DynamicFunction (One);

    ShowMessage (s); // va afișa „2006”

 

    s: = DynamicFunction (Doi);

    ShowMessage (s); // va afișa „4012”Sfârșit; 

Notite importante

  • Desigur, decideți semnătura "TFunctionParameter": dacă este o procedură sau o funcție, câți parametri necesită, etc..
  • Dacă „TFunctionParameter” este o metodă (a unui obiect de instanță), trebuie să adăugați cuvintele de obiect la denumirea de tip procedural, ca în: TFunctionParameter = funcție (valoarea const: integer): șir de obiect;
  • Dacă vă așteptați ca "nil" să fie specificat ca parametru "f", ar trebui să testați acest lucru folosind funcția Asignat.
  • Fixarea "Tip incompatibil: 'indicatorul metodei și procedura regulată'"