导入代码时出现错误“模块:文档中已经需要标识符”

时间:2019-03-31 13:19:53

标签: racket require

在我的Racket程序中,当我尝试从我编写的文件中获取代码时,收到错误消息:“模块:doc中已经需要标识符”。但是,当我将代码复制并粘贴到require模块中时,它可以正常工作。想法?

我尝试使用(提供(全部定义))以及在提供表单中列出所有函数名称。顺便说一下,我是在Scribble文件而不是直接的Racket文件中编码的。

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

请注意,所有导入都可以从directorys.scrbl文件正常工作,但是当我需要model-files.scrbl时会发生问题。

更新:绝对是Scribble的问题。我将所有代码从Scribble更改为Racket代码,问题消失了。

1 个答案:

答案 0 :(得分:2)

#lang scribble/base#lang scribble/manual#lang scribble/doc自动提供doc。因此,当您无条件require书写两个涂鸦文件时,doc就会发生冲突。

有两种方法可以解决此问题。

  1. 使用only-inexcept-in控制应require进行的操作。例如,您可以编写:

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

    这将需要directories.scrblmodel-files.scrbl中除doc之外的所有内容。

  2. 但是据我所知,直接require直接存储一个Scribble文件是非常罕见的。更好的方法是重组,方法是创建一个名为utils.rkt的Racket文件,然后将要使用的文件放在多个{Scribble}文件中,然后utils.rkt中。