D (程式語言)/d2/模組
在本課中,您將瞭解 D 的模組系統。模組是包含變數、函式和其他 D 結構定義的程式碼單元,這些程式碼單元屬於一起。這對於建立可重用程式碼很有用。您在每一課中都看到了模組。事實上,所有 D 原始檔都是模組。stdio 模組包含像 writeln 這樣的函式。stdio 模組寫在名為 stdio.d 的檔案中,位於dmd/src/phobos/std/stdio.d。它包含對控制檯輸入輸出和檔案輸入輸出有用的程式碼。它位於名為std 的包中,其中還包含其他模組,如 std.algorithm 或 std.string,您將在以後學習。Phobos 庫只是隨 D 編譯器一起提供的一個大型模組集合。
// main.d
module main;
import std.stdio;
import module1;
import byebye : sayBye;
void main()
{
happy();
writeln("Mothers Day!");
sayBye();
// sayByeInItalian(); undefined identifier 'sayByeInItalian'
}
// happy.d
module module1;
import std.stdio;
void happy()
{
write("Happy ");
}
private void sad()
{
write("Who gives a darn about ");
}
private:
void mad() { }
void bad() { }
//bye.d
module byebye;
import std.stdio;
void sayBye()
{
writeln("Goodbye!");
}
void sayByeInItalian()
{
writeln("Arrivederci");
}
像這樣編譯:dmd main.d happy.d bye.d
所有 D 程式碼都在模組內。在 D 程式中,必須有一個包含main 函式的模組。如果一個模組匯入另一個模組,則被匯入模組的定義將對第一個模組可用。在入門程式碼中,main 模組匯入了另外兩個模組:module1 和 byebye。但是,當匯入byebye 時,只匯入了一個函式:sayBye 函式。該語法為import modulename : identifier1, identifier2, identifier3;。
D 原始檔可以使用模組宣告來指定模組的名稱以及它所屬的包,該宣告位於開頭。例如,在stdio 模組中,有以下行
module std.stdio;
該行指定了模組的名稱(stdio)以及它所在的包(std)。每個原始檔最多隻能有一個模組宣告。如果沒有,則原始檔名(不帶副檔名)將成為模組名稱。
在module1 中sad 定義中的void 之前,您看到了修飾符private。這意味著sad 函式無法匯入。您也不能執行import module1 : sad。如果您看到一行說private:,則該行下面的所有內容都是private。同樣,如果您看到private { } ,則大括號內的所有內容都是 private。
- 模組的名稱不必與該模組內的定義的名稱相關。
- 模組的名稱不必與檔名相關。
- 還有一個
public修飾符,它與private修飾符相反。既沒有用public標記也沒有用private標記的宣告預設情況下是public的。 - 所有 D 原始檔都是模組,即使檔案中沒有模組宣告。