在我的Racket程序中,当我尝试从我编写的文件中请求代码时,我收到错误消息:“模块:doc中已经需要的标识符”。但是当我将代码复制并粘贴到需求模块时,它工作正常。想法?
我尝试过使用(提供(全定义))以及列出提供表单中的所有函数名称。顺便说一下,我在Scribble文件而不是直接的Racket文件中编码。
@(require racket/date
racket/file
racket/string
racket/list
racket/function
racket/format
db
"directories.scrbl"
"model-files.scrbl"
)
请注意,所有导入都可以在directories.scrbl文件中正常工作,但是当我需要model-files.scrbl时会出现问题。
更新:这绝对是Scribble的一个问题。我将所有代码从Scribble更改为Racket代码,问题就消失了。
#lang scribble/base
,#lang scribble/manual
和#lang scribble/doc
自动提供doc
。因此,当你无条件require
两个Scribble文件时,doc
相撞。
有两种方法可以解决这个问题。
only-in
或except-in
来控制require
d应该是什么。例如,你可以写:
(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")
。