Коротко. Сделал экспорт словарей.
Вдогонку к - Коротко. Сделал чудную штуку - переопределение слов.
Пример:
Вот есть код:
Как исправить ситуацию?
Можно так:
А можно так:
Зачем это нужно?
А это очень полезно для написания "фасадных слоёв".
Когда слои вроде бы надо и изолировать с одной стороны, а с другой стороны надо давать им "прыгать через голову".
Очень удобно.
Особенно учитывая наличие слова FORGET. Которое позволяет выкинуть слово из области видимости.
Ну и ещё есть конструкция:
Это означает - "экспортировать из нашего словаря все словари, которые включены в нас через USES".
А также есть конструкция:
Это означает "экспортировать из нашего словаря слово X из словаря A".
А также есть конструкция:
Это означает "экспортировать из нашего словаря слово X из словаря A. Под именем Y".
А вот ещё есть проблема.
Есть Enum = (one, two, three).
В модуле A.
И есть модуль B, который определяет функцию X, которая работает с этим Enum.
Понятное дело, что B делает USES A и видит члены Enum.
А вот есть модуль C, который делает USES B и использует функцию X.
Так вот для того, чтобы ему использовать элементы Enum, то ему надо сделать USES A.
Чтобы "увидеть" one, two, three.
Ну или можно в модуле B сделать EXPORTS A, ну или EXPORTS A :: Enum.
И тогда модулю C не надо будет делать USES A.
Он будет видеть то что ему нужно, через USES B и EXPORTS A :: Enum.
Когда руками все эти USES пишешь - оно ещё ничего... Но когда расставляешь все эти стрелочки на модели, то тут и понимаешь весь "ужас"...
И тут на помощь приходят EXPORTS.
Понимаю, что есть C++ где сквозные include, но там есть другие проблемы. С изоляцией архитектурных слоёв
Да и понятно, что всё это с Python перекликается.
Вдогонку к - Коротко. Сделал чудную штуку - переопределение слов.
Пример:
Вот есть код:
UNIT uA PROCEDURE A ... ; // A ... UNIT uB USES uA ; PROCEDURE B ... A // - компилируется, потому, что есть USES uA ; // B UNIT uC USES uB ; PROCEDURE C ... B // - компилируется, потому, что есть USES uB A // - НЕ компилируется, потому, что нет USES uA ; // C
Как исправить ситуацию?
Можно так:
UNIT uA PROCEDURE A ... ; // A ... UNIT uB USES uA ; PROCEDURE B ... A // - компилируется, потому, что есть USES uA ; // B UNIT uC USES uA uB ; PROCEDURE C ... B // - компилируется, потому, что есть USES uB A // - компилируется, потому, что есть USES uA ; // C
А можно так:
UNIT uA PROCEDURE A ... ; // A ... UNIT uB USES uA ; EXPORTS uA // - экспортируем модуль uA, он будет виден ТЕМ, кто включает в себя НАШ модуль uB PROCEDURE B ... A // - компилируется, потому, что есть USES uA ; // B UNIT uC USES uB ; PROCEDURE C ... B // - компилируется, потому, что есть USES uB A // - компилируется, потому, что в модуле B есть EXPORTS uA ; // C
Зачем это нужно?
А это очень полезно для написания "фасадных слоёв".
Когда слои вроде бы надо и изолировать с одной стороны, а с другой стороны надо давать им "прыгать через голову".
Очень удобно.
Особенно учитывая наличие слова FORGET. Которое позволяет выкинуть слово из области видимости.
Ну и ещё есть конструкция:
EXPORTS *
Это означает - "экспортировать из нашего словаря все словари, которые включены в нас через USES".
А также есть конструкция:
EXPORTS A :: X
Это означает "экспортировать из нашего словаря слово X из словаря A".
А также есть конструкция:
EXPORTS A :: X AS Y
Это означает "экспортировать из нашего словаря слово X из словаря A. Под именем Y".
А вот ещё есть проблема.
Есть Enum = (one, two, three).
В модуле A.
И есть модуль B, который определяет функцию X, которая работает с этим Enum.
Понятное дело, что B делает USES A и видит члены Enum.
А вот есть модуль C, который делает USES B и использует функцию X.
Так вот для того, чтобы ему использовать элементы Enum, то ему надо сделать USES A.
Чтобы "увидеть" one, two, three.
Ну или можно в модуле B сделать EXPORTS A, ну или EXPORTS A :: Enum.
И тогда модулю C не надо будет делать USES A.
Он будет видеть то что ему нужно, через USES B и EXPORTS A :: Enum.
Когда руками все эти USES пишешь - оно ещё ничего... Но когда расставляешь все эти стрелочки на модели, то тут и понимаешь весь "ужас"...
И тут на помощь приходят EXPORTS.
Понимаю, что есть C++ где сквозные include, но там есть другие проблемы. С изоляцией архитектурных слоёв
Да и понятно, что всё это с Python перекликается.
Комментариев нет:
Отправить комментарий