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 |