Получение ошибки «модуль: идентификатор уже требуется в документе» при импорте кода - PullRequest
1 голос
/ 31 марта 2019

В моей программе Racket появляется сообщение об ошибке: «module: identifier уже требуется в doc», когда я пытаюсь запросить код из файла, который я написал. Но когда я копирую и вставляю код в нужный модуль, он работает нормально. Идеи?

Я пытался использовать (предоставить (полностью определено)), а также перечислить все имена функций в форме предоставления. Кстати, я пишу это в файлах Scribble, а не в простых файлах Racket.

@(require racket/date
          racket/file
          racket/string
          racket/list
          racket/function
          racket/format
          db
          "directories.scrbl"
          "model-files.scrbl"
          )

Обратите внимание, что все операции импорта работают нормально из файла directoryies.scrbl, но проблема возникает, когда мне требуется модель-files.scrbl.

Обновление: это определенно проблема со Scribble. Я изменил весь код на код ракетки с Scribble, и проблема исчезла.

1 Ответ

2 голосов
/ 01 апреля 2019

#lang scribble/base, #lang scribble/manual и #lang scribble/doc автоматически предоставляют doc. Поэтому, когда вы безоговорочно require два документа Scribble, doc сталкивается.

Есть два способа решения этой проблемы.

  1. Используйте only-in или except-in для контроля того, что должно быть require d. Например, вы можете написать:

    (require (except-in "directories.scrbl" doc)
             (except-in "model-files.scrbl" doc))
    

    Для этого потребуется все от directories.scrbl и model-files.scrbl, кроме doc от обоих.

  2. Но, насколько я знаю, очень редко (и не однократно) напрямую require файл Scribble. Лучший способ - это реструктурировать, создав файл Racket с именем utils.rkt и поместить то, что вы хотите использовать, в несколько файлов Scribble в utils.rkt, а затем вместо него (require "utils.rkt").

...