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

Module 什么是Racket中的模块路径索引,module,racket,dynamic-linking,Module,Racket,Dynamic Linking,Racket有(谓词是模块路径?),(谓词是解析的模块路径?)和(谓词是模块路径索引?) 我猜模块路径?是可能指向模块的任何东西。我猜解析的模块路径指向系统上的实际模块 但是什么是模块路径索引?它能让我超越解析的模块路径吗?a模块路径?包含任何可以要求的内容。可以是路径?,可以是符号,可以是子模块路径(submod“food.rkt”午餐)。请参阅文档中的 解析模块路径?是Racket可以找到模块的“绝对路径”(注1)。解析模块路径的语法比模块路径的语法更为有限(即,不那么模棱两可) 模块路径索

Racket有(谓词是
模块路径?
),(谓词是
解析的模块路径?
)和(谓词是
模块路径索引?

我猜
模块路径?
是可能指向模块的任何东西。我猜解析的模块路径指向系统上的实际模块


但是什么是模块路径索引?它能让我超越解析的模块路径吗?

a
模块路径?
包含任何可以
要求的内容。可以是
路径?
,可以是符号,可以是子模块路径
(submod“food.rkt”午餐)
。请参阅文档中的

解析模块路径?
是Racket可以找到模块的“绝对路径”(注1)。解析模块路径的语法比模块路径的语法更为有限(即,不那么模棱两可)


模块路径索引(MPI)是从一个
模块路径索引到另一个
的增量(注2)。使用模块路径索引联接来构建MPI(注3)

  • (模块路径索引联接#f#f
    )是从当前模块到自身的增量
  • (模块路径索引join“bullings.rkt”#f)
    是从
    #f
    (当前模块)到相对路径
    “/bullings.rkt”
    (是的,它实际上是路径优先,然后是基路径。)
  • (模块路径索引连接“nom noms.rkt”(模块路径索引连接“buzzles.rkt”#f))
    是从当前模块到
    ”/buzzles.rkt“
    ”/nom noms.rkt“
    的增量。当一个文件静态地需要另一个文件时,Racket会像这样构建MPI——这些文件可以链接在一起以找到标识符的绑定
  • (模块路径索引联接’(子模块测试)#f)
    指当前模块中的测试子模块
希望有帮助


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

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


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

将其移动到注释;-)问题的一部分是模块路径索引是半内部的,这对模块系统很重要(两次加载模块是个坏主意)。是的,它们是半内部的,只是为了帮助两次加载。尽管有时您确实希望加载一个模块两次,例如,如果您正在编写DrRacket,并且希望该模块在用户点击run时运行。