Affecter une procédure à une variable
Bonjour à tous,
Est-il possible d'affecter une procédure à une variable de manière à pouvoir réaliser des constructions de ce type:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| PROCEDURE hello;
BEGIN
WRITELN('Hello')
END;
PROCEDURE repeter(action: procedure;n: INTEGER)
VAR
i: INTEGER;
BEGIN
FOR i:=1 TO n DO action
END;
BEGIN
repeter(hello,3)
END. |
Et sinon, quelle solution permettrait d'aboutir au même résultat ?
Merci d'avance,
Gauthier
Affecter une procédure avec paramètres à une variable
Bonjour à tous,
Dans un message précédent, je pensais avoir trouvé une solution au fait de passer une procédure comme paramètre à une autre. Malheureusement, ça ne semble pas fonctionner pour des procédures demandant des paramètres.
Par rapport à l'exemple précédent, j'ajoute une procédure helloqui, et bien que j'utilise exactement la même syntaxe, je reçois ce message d'erreur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| PROGRAM test;
TYPE
Tproc = PROCEDURE;
PROCEDURE hello;
BEGIN
WRITELN('Hello')
END;
PROCEDURE helloqui(s: STRING);
BEGIN
WRITELN('Hello ,',s)
END;
PROCEDURE repeter(action: tproc;n: INTEGER);
VAR
i: INTEGER;
BEGIN
FOR i:=1 TO n DO action
END;
VAR
thello, thelloqui: Tproc;
s: STRING;
BEGIN
thello := @hello;
thelloqui := @helloqui;
repeter(thello,3);
repeter(thelloqui('Monsieur'),3);
END. |
Code:
1 2 3
| repeter.pas(25,16) Error: Incompatible types: got "<address of procedure(ShortString);Register>" expected "<procedure variable type of procedure;Register>"
repeter.pas(31) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted |
Est-ce quelqu'un a une explication et une solution ? Je rappelle que j'utilise FreePascal.