Процедурные значения
Переменной процедурного типа можно присвоить процедурное значение. Процедурные значения могут быть следующими:
* значениями nil; * ссылкой на переменную процедурного типа; * идентификатором процедуры или функции.
В контексте процедурных значений описание процедуры или функции можно рассматривать как специальный вид описаний конс- тант, когда значением константы является процедура или функция. Рассмотрим, например, следующее описание:
var P: SwapProc; F: MathFunc;
procedure Swap(var A, B: Integer); far; var Temp: Integer; begin Temp := A; A := B; B := Temp; end;
function Tan(Angle: Real); far; begin Tan := Sin(Angle) / Cos(Angle); end;
Переменным P и F можно присвоить значения следующим образом:
P := Swap; F := Tan;
а вызовы с помощью P и F можно выполнить так:
P(I, J); { эквивалентно Swap(I, J) } X := F(X); { эквивалентно X := Tan(X) }
Использование процедурных переменных, которым в операторе вызова процедуры или функции присваивается значение nil, приводит к ошибке. Значение nil предназначено для указания того, что про- цедурная переменная не присвоена, и, так где процедурная перемен- ная может получить значение nil, участвующие в этой процедурной переменной вызовы процедур и функций следует подвергать проверке:
if @P <> nil then P(I, J);
Обратите внимание на использование операции @ для указания того, что P проверяется, а не вызывается.