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