2017-09-26 93 views
2

球拍模块路径指数已经Module Paths(谓语是module-path?),Resolved Module Paths(谓语是resolved-module-path?)和Module Path Indexes(谓语是module-path-index?)。什么是球拍

我想module-path?是任何可能合理地指向一个模块。我想解决的模块路径指向系统上的实际模块。

但什么是模块路径索引,它是什么让我只是解决模块路径?

+0

将此转移到注释;-)部分难题是模块路径索引是半实体的,这对模块系统很重要(两次加载模块是个坏主意)。 – soegaard

+0

是的,他们是半实习的,只是为了帮助双重加载。尽管有时候你确实想要加载一个模块两次,比如你正在编写DrRacket,并且你希望模块在用户运行时运行。 –

回答

2

A module-path?包含任何可能是require d。可能是path?,可能是符号,可能是子模块路径(submod "food.rkt" lunch)。请参阅文档中的require

resolved-module-path?是“绝对路径”到球拍可以找到模块(注1)。解析模块路径的语法比模块路径更受限制(即不太模糊)。

module-path-index?(MPI)是从一个module-path-index?到另一个(注2)的增量。使用module-path-index-join构建MPI(注3)。

  • (module-path-index-join #f #f)是从当前模块到它自身的增量。
  • (module-path-index-join "dumplings.rkt" #f)是从#f增量(当前模块)的相对路径"./dumplings.rkt"(是它是真正路径第一,然后。)
  • (module-path-index-join "nom-noms.rkt" (module-path-index-join "dumplings.rkt" #f))是从当前模块"./dumplings.rkt""./nom-noms.rkt"的增量。当一个文件静态地需要另一个文件时,球拍建立这样的MPI--这些可以被链接在一起以找到标识符的绑定。
  • (module-path-index-join '(submod test) #f)是指当前模块中的测试子模块。

希望有帮助。


注1:如果模块位于文件中,则其解析路径为绝对文件路径。如果模块是在语法对象上调用eval的结果,则其resolved-module-path?是别的。

注2:IMO“模块路径增量”将是一个更好的名称。

注意3:module-path-index-join接受第三个可选参数,前两个参数为#f。这可让模块引用其自己的子模块之一。您通常不希望直接使用此功能。而是使用quote-module-path