Руководство по языку B.Pascal 7

       

Процедурные значения


Переменной процедурного типа можно присвоить процедурное значение. Процедурные значения могут быть следующими:

* значениями 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 проверяется, а не вызывается.



Содержание раздела