Это старая версия документа!
Суть этой возможности в Компонентном Паскале состоит в том, что можно создать переменную, которой позже можно присвоить адрес какой-либо процедуры, после чего, можно использовать эту переменную как саму процедуру.
При этом, нужно помнить, что список аргументов у переменной процедурного типа и самой процедуры должны совпадать.
MODULE TestProcedure; IMPORT sl := StdLog; TYPE tP = PROCEDURE (IN str: ARRAY OF CHAR); PROCEDURE Test1 (IN str: ARRAY OF CHAR); BEGIN sl.String('Test1:=' + str); sl.Ln END Test1; PROCEDURE Test2 (IN str: ARRAY OF CHAR); BEGIN sl.String('Test2:=' + str); sl.Ln END Test2; PROCEDURE Start*; VAR pp: tP; str: ARRAY 40 OF CHAR; BEGIN pp := Test1; str := 'Привет, Вася!'; pp(str); pp := Test2; str := 'Привет, Петя!'; pp(str) END Start; END TestProcedure. TestProcedure.Start
Если переменной процедурного типа не присвоить значение, она будет иметь значение NIL.