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

问题描述 投票:1回答:1

在我的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代码,问题就消失了。

racket require
1个回答
2
投票

#lang scribble/base#lang scribble/manual#lang scribble/doc自动提供doc。因此,当你无条件require两个Scribble文件时,doc相撞。

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

  1. 使用only-inexcept-in来控制required应该是什么。例如,你可以写: (require (except-in "directories.scrbl" doc) (except-in "model-files.scrbl" doc)) 这需要来自directories.scrblmodel-files.scrbl的所有内容,除了来自两者的doc
  2. 但据我所知,require直接使用Scribble文件是非常罕见的(并且是单一的)。更好的方法是通过创建一个名为utils.rkt的Racket文件进行重组,并将您要使用的东西放在utils.rkt中的几个Scribble文件中,然后再使用(require "utils.rkt")
© www.soinside.com 2019 - 2024. All rights reserved.