Ein module-path?
enthält alles, was require
d sein kann. Könnte ein path?
sein, könnte ein Symbol sein, könnte ein Submodul Pfad (submod "food.rkt" lunch)
sein. Siehe require
in den Dokumenten.
A resolved-module-path?
ist ein "absoluter Pfad", wo das Modul Racket (Anmerkung 1) finden. Die Grammatik für aufgelöste Modulpfade ist begrenzter (d. H. Weniger mehrdeutig) als für Modulpfade.
A module-path-index?
(MPI) ist ein Delta von einem module-path-index?
zu einem anderen (Anmerkung 2). Verwenden Sie module-path-index-join
zum Erstellen von MPIs (Hinweis 3).
(module-path-index-join #f #f
) ist ein Delta von dem aktuellen Modul selbst.
(module-path-index-join "dumplings.rkt" #f)
ist ein Delta von #f
(das aktuelle Modul) mit dem relativen Pfad "./dumplings.rkt"
(Ja es ist wirklich Pfad zuerst, dann Basis.)
(module-path-index-join "nom-noms.rkt" (module-path-index-join "dumplings.rkt" #f))
ist ein Delta von dem Strommodul "./dumplings.rkt"
zu "./nom-noms.rkt"
. Racket baut MPIs wie folgt auf, wenn eine Datei statisch eine andere benötigt --- diese können miteinander verkettet werden, um die Bindung einer Kennung zu finden.
(module-path-index-join '(submod test) #f)
bezieht sich auf das Test-Submodul im aktuellen Modul.
Hoffe, dass hilft.
Anmerkung 1: Wenn das Modul in einer Datei ist, denn es ist ein aufgelöster Pfad ist ein absoluter Dateipfad. Wenn das Modul das Ergebnis des Aufrufs von eval
für ein Syntaxobjekt ist, ist sein resolved-module-path?
etwas anderes.
Hinweis 2: IMO "Modulpfaddeltas" wäre ein besserer Name.
Hinweis 3: module-path-index-join
akzeptiert ein drittes optionales Argument, wenn die ersten beiden Argumente #f
sind. Dadurch kann sich ein Modul auf eines seiner eigenen Submodule beziehen. Sie werden diese Funktion im Allgemeinen nicht direkt verwenden wollen. Verwenden Sie stattdessen quote-module-path
.
Verschieben Sie dies zu einem Kommentar ;-) Teil des Puzzles ist, dass Modulpfadindizes halb-interniert sind, was für das Modulsystem wichtig ist (ein Modul zweimal laden ist eine schlechte Idee). – soegaard
Yup, sie sind halb interniert, nur um das Laden zu erleichtern.Manchmal möchten Sie ein Modul sogar zweimal laden, z. B. wenn Sie DrRacket schreiben und das Modul ausgeführt werden soll, wenn der Benutzer auf "Ausführen" klickt. –