什么是Racket中的模块路径索引

时间:2017-09-26 13:15:20

标签: module racket dynamic-linking

球拍有Module Paths(谓词为module-path?),Resolved Module Paths(谓词为resolved-module-path?),Module Path Indexes(谓词为module-path-index?

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

但是什么是模块路径索引以及它仅通过已解析的模块路径获得了什么?

1 个答案:

答案 0 :(得分:2)

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

resolved-module-path? 是"绝对路径"到Racket可以找到模块的地方(注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"的增量。当一个文件静态地需要另一个文件时,Racket会构建这样的MPI--这些文件可以链接在一起以找到标识符的绑定。
  • (module-path-index-join '(submod test) #f)指当前模块中的测试子模块。

希望有所帮助。

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

注2:IMO"模块路径增量"会是一个更好的名字。

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