2017-09-26 132 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