跳轉到內容

D(程式語言)/d2/模組

50% developed
來自華夏公益教科書,開放的書籍,開放的世界

第6課:模組

[編輯 | 編輯原始碼]

在本課中,您將瞭解D的模組系統。模組是程式碼單元,包含變數、函式和其他D結構的定義,這些定義屬於一起。這對於建立可重用程式碼很有用。您在每一課中都見過模組。實際上,所有D原始檔都是模組。stdio 模組包含諸如writeln 之類的函式。stdio模組以dmd/src/phobos/std/stdio.d路徑下的名為stdio.d的檔案編寫。它包含對控制檯輸入輸出和檔案輸入輸出有用的程式碼。它位於一個名為std中,該包還包含諸如std.algorithmstd.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模組匯入了另外兩個模組:module1byebye。但是,當匯入byebye時,只匯入了一個函式:sayBye 函式。它的語法是import modulename : identifier1, identifier2, identifier3;

模組宣告

[編輯 | 編輯原始碼]

D原始檔可以使用模組宣告來指定模組的名稱及其所屬的包,該宣告放在開頭。例如,在stdio 模組中,有這一行

module std.stdio;

該行指定了模組的名稱(stdio)和它所在的包(std)。每個原始檔最多隻能有一個模組宣告。如果沒有,則原始檔名(不含副檔名)將成為模組名稱。

可見性

[編輯 | 編輯原始碼]

module1sad定義中的void之前,您會看到修飾符private。這意味著sad函式不能被匯入。您也不能執行import module1 : sad。如果您看到一行寫著private:,那麼該行以下的所有內容都是private。同樣,如果您看到private { } ,則大括號內的所有內容都是私有的。

  • 模組的名稱不必與該模組內的定義的名稱相關。
  • 模組的名稱不必與檔名相關。
  • 還有一個public修飾符,它與private修飾符相反。既沒有public也沒有private標記的宣告預設情況下是public
  • 所有D原始檔都是模組,即使檔案中沒有模組宣告。
華夏公益教科書