Usar una función o un procedimiento como parámetro en otra función

En Delphi, tipos de procedimiento (punteros de método) le permiten tratar los procedimientos y funciones como valores que pueden asignarse a variables o pasarse a otros procedimientos y funciones.

Aquí se explica cómo llamar a una función (o procedimiento) como parámetro de otra función (o procedimiento):

  1. Declare la función (o procedimiento) que se utilizará como parámetro. En el ejemplo a continuación, esto es "TFunctionParameter".
  2. Defina una función que acepte otra función como parámetro. En el siguiente ejemplo, esto es "DynamicFunction"
 tipo

    TFunctionParameter = función(const valor: entero): cuerda;

...
función Uno(const valor: entero): cuerda;empezar

    resultado: = IntToStr (valor);

 final;

función Dos(const valor: entero): cuerda;empezar

    resultado: = IntToStr (2 * valor);

 final;

función DynamicFunction (f: TFunctionParameter): cuerda;empezar

    resultado: = f (2006);

 final;

...
// Ejemplo de uso:

 

 var

    s: cadena;

 empezar

    s: = DynamicFunction (uno);

    ShowMessage (s); // mostrará "2006"

 

    s: = DynamicFunction (dos);

    ShowMessage (s); // mostrará "4012"final; 

Notas importantes

  • Por supuesto, usted decide la firma del "TFunctionParameter": si es un procedimiento o una función, cuántos parámetros toma, etc..
  • Si "TFunctionParameter" es un método (de un objeto de instancia), debe agregar las palabras de objeto al nombre del tipo de procedimiento, como en: TFunctionParameter = function (const value: integer): string of object;
  • Si espera que "nil" se especifique como el parámetro "f", debe probarlo utilizando la función Asignada.
  • Arreglando el "Tipo incompatible: 'puntero de método y procedimiento regular'"