При реорганизации моего идентификатора базы кода, как для очистки моего механизма обмена кодами. Пока что я использую source для множества небольших, в основном автономных модулей функциональности.
Однако этот подход страдает рядом проблем, среди них
- отсутствие тестов для округлости (случайные круговые цепочки
source), - сложный синтаксис, необходимый для правильного указания включенных путей (аргумент
chdir=TRUE, жестко закодированные пути), - потенциал конфликтов имен (при переопределении объектов).
В идеале Id нравится что-то похожее на механизм модуля Python. Механизм пакета R будет здесь излишним: Я не хочу генерировать иерархию вложенных путей, несколько файлов с множеством метаданных и вручную создавать пакет, чтобы получить небольшой автономный модуль многократного использования.
Теперь Im использует фрагмент кода, который позволяет мне решить первые две проблемы, упомянутые выше. Синтаксис включения таков:
import(functional)
import(io)
import(strings)
... и модуль определяется как простой исходный файл, который находится в локальном пути. Определение import прост, но я не могу решить третий вопрос: я хочу импортировать модуль в отдельное пространство имен, но из того, что вижу механизм поиска пространства имен довольно жестко связан с пакетами. Правда, я мог бы переопределить `::` или getExportedValue и, возможно, asNamespace и isNamespace, но это очень грязно и может нарушить другие пакеты.