在我的 Racket 程序中,当我尝试从我编写的文件中要求代码时,我收到错误消息:"模块:文档中已经需要标识符"。但是当我将代码复制并粘贴到要求模块中时,它工作正常。想法?
我尝试使用(提供(全部定义输出((以及在提供表单中列出所有函数名称。顺便说一下,我正在用涂鸦文件而不是直接的Racket文件来编码。
@(require racket/date
racket/file
racket/string
racket/list
racket/function
racket/format
db
"directories.scrbl"
"model-files.scrbl"
)
请注意,从目录.scrbl文件的所有导入都可以正常工作,但是当我需要model-files.scrbl时,就会出现问题。
更新:这绝对是涂鸦的问题。我将所有代码从Scribble更改为Racket代码,问题消失了。
#lang scribble/base
、#lang scribble/manual
和#lang scribble/doc
自动提供doc
。因此,当您无条件地require
两个 Scribble 文档时,doc
就会发生冲突。
有两种方法可以解决此问题。
-
使用
only-in
或except-in
来控制应require
的内容。例如,您可以编写:(require (except-in "directories.scrbl" doc) (except-in "model-files.scrbl" doc))
这将需要
directories.scrbl
和model-files.scrbl
的所有内容,除了两者的doc
。 -
但据我所知,直接
require
Scribble 文件是非常罕见的(也是不合时宜的(。更好的方法是通过创建一个名为utils.rkt
的 Racket 文件来重组,并将您想要使用的东西放在utils.rkt
中的多个 Scribble 文件中,然后改为(require "utils.rkt")
。