Borland Pascal. Руководство пользователя
6cac1dc9

Ссылки на описания модуля


Как только вы включили модуль в свою программу, все констан- ты, типы данных, переменные, процедуры и функции, описанные в секции интерфейса этого модуля, становятся доступными для вашей программы. Например, допустим, имеется следующий модуль:

unit MyStuff; interface const MyValue = 915; type MyStars = (Deneb,Antares,Betelgeuse); var MyWord : string[20];

procedure SetMyWord(Star : MyStars); function TheAnswer : integer; implementation . . . end.

Как можно видеть здесь в интерфейсной части модуля, та часть модуля, которая находится в интерфейсной секции, является видимой для вашей программы (и может ею использоваться). С учетом этого можно написать следующую программу:

program TestStuff; uses MyStuff; var I : integer; AStar : MyStars; begin Writeln(myValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := TheAnswer; Writeln(I) end.

После включения в программу оператора uses MyStuff вы можете ссылаться на все идентификаторы, описанные в интерфейсной секции модуля МyStuff (МyWord, МyValue и так далее). Однако, рассмотрим следующую ситуацию:

program TestStuff; uses MyStuff; const MyValue = 22; var I : integer; AStar : MyStars;

function TheAnswer : integer; begin TheAnswer := 1 end;

begin Writeln(myValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := TheAnswer; Writeln(I) end.

В этой программе переопределяются некоторые из идентификато- ров, описанных в МyStuff. Будучи скомпилированной и выполненной, эта программа будет использовать собственные определения для МyValue и ТheAnswer, поскольку они были описаны позднее, чем оп- ределения в МyStuff.

Вероятно, вам интересно знать, каким образом в такой ситуа- ции можно ссылаться на идентификаторы в МyStuff. Для этого необ- ходимо перед каждым идентификатором помещать имя МyStuff с точкой (.). Например, рассмотрим еще одну версию этой программы:

program TestStuff; uses MyStuff; const MyValue = 22; var I : integer; AStar : MyStars;

function TheAnswer : integer; begin TheAnswer := 1 end;

begin Writeln(MyStuff.MyValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := MyStuff.TheAnswer Writeln(I) end.

Эта третья программа даст такие же ответы, что и первая, да- же в том случае, если вы переопределите MyValue и TheAnswer. В действительности вы имели полное право написать первую программу следующим образом:

program TestStuff; uses MyStuff; var I : integer; AStar : MyStuff.MyStars;

begin Writeln(MyStuff.MyValue); AStar := My.Stuff.Deneb; MyStuff.SetMyWord(AStar); Writeln(My.Stuff.MyWord); I := MyStuff.TheAnswer; Writeln(I) end.

Отметим, что имя модуля может предшествовать любому иденти- фикатору: константе, типу данных, переменной или подпрограмме.



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