16.3 Namespaces: Уточноние модуля

На верх  Назад  Вперёд

Из диаграммы синтаксиса для модуля видно что, имя модуля может содержать уточнение. Это означает что модули могут быть организованы в пространстве имен.

Тогда, следующее определение модуля правильно:

unit a.b;

 

interface

 

Function C : integer;

 

implementation

 

Function C : integer;

begin

Result:=1;

end;

 

end.

Модуль можно использовать так:

program d;

 

uses a.b;

 

begin

Writeln(c);

end.

При использовании символических имён, уточнение модуля всегда имеют приоритет над символическими именами внутри модуля.

Тогда следующие определения модулей:

unit myunit;

 

interface

 

var

test: record

  a: longint;

end;

 

implementation

 

initialization

test.a:=2;

end.

и

unit myunit.test;

 

interface

 

var

a: longint;

 

implementation

 

initialization

a:=1;

end.

Программа всегда обращается к переменной а в модуле myunit.test, как myunit.test.a:

uses

  myunit, myunit.test; //!!!

 

begin

Writeln('myunit.test.a : ',myunit.test.a);

end.

Она выведет:

myunit.test.a: 1

Изменение порядка объявления модулей не изменит уточнённого обращения к переменной.

uses

  myunit.test, myunit; //!!! Порядок изменён

 

begin

Writeln('myunit.test.a : ',myunit.test.a);

end.

будет всегда выводить

myunit.test.a : 1

Аналогично, следующая программа таким образом myunit.test.a обращается к переменной а в модуле myunit.test (т.к. в модуле myunit нет переменной a):

uses

  myunit.test, myunit;

 

begin

Writeln('a : ',a);

end.

она выведет:

a : 1

Аналогично, следующая программа таким образом test.a обращается к переменной (внутри записи) test.a в модуле myunit:

uses

  myunit.test, myunit;

 

begin

Writeln('test.a : ',test.a);

end.

выведет

test.a : 2