W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
模塊是D的構(gòu)建塊,它們基于一個簡單的概念,每個源文件都是一個模塊,因此,我們編寫程序的單個文件是單獨的模塊.默認情況下,模塊的名稱與不帶.d擴展名的模塊的文件名相同。
明確指定時,模塊的名稱由module關(guān)鍵字定義,該關(guān)鍵字必須顯示為源文件中的第一個非注釋行。如假定源文件的名稱為" employee.d"。然后,模塊名稱由 module 關(guān)鍵字指定,后跟 employee 。如下圖所示。
module employee;
class Employee {
//Class definition goes here.
}
模塊行是可選的,如果未指定,則與不帶.d擴展名的文件名相同。
D在源代碼和模塊名稱中支持Unicode,但是,文件系統(tǒng)的Unicode支持有所不同。如盡管大多數(shù)Linux文件系統(tǒng)都支持Unicode,但Windows文件系統(tǒng)中的文件名可能無法區(qū)分大小寫字母。此外,大多數(shù)文件系統(tǒng)都限制了文件名和目錄名中可以使用的字符,出于可移植性的原因,我建議您在文件名中僅使用小寫ASCII字母。如," employee.d"將是名為employee的類的合適文件名。
因此,模塊的名稱也將由ASCII字母組成-
module employee; // Module name consisting of ASCII letters
class e?mploy?? { }
相關(guān)模塊的組合稱為Package包,包也是一個簡單的概念:位于同一目錄內(nèi)的源文件被視為屬于同一包,目錄名將成為軟件包的名稱,還必須將其指定為模塊名稱的第一部分。
如果" employee.d"和" office.d"位于目錄" company"內(nèi),則指定目錄名稱以及模塊名稱會使它們成為同一軟件包的一部分-
module company.employee;
class Employee { }
同樣,對于辦公模塊-
module company.office;
class Office { }
由于軟件包名稱與目錄名稱相對應(yīng),因此深度超過一個目錄級別的模塊的軟件包名稱必須反映該層次結(jié)構(gòu)。
module company.branch.employee;
到目前為止,我們幾乎在每個程序中都使用了import關(guān)鍵字,用于將模塊引入當前模塊-
import std.stdio;
模塊名稱也可以包含程序包名稱。如,std。上面的part表示stdio是作為std軟件包一部分的模塊。
編譯器通過將包和模塊名稱直接轉(zhuǎn)換為目錄和文件名稱來查找模塊文件。
如,雇員和辦公室這兩個模塊分別位于" company/employee.d"和" animal/office.d"(或" company\employee.d"和" company\office.d",具體取決于文件系統(tǒng)),適用于company.employee和company.office。
程序中使用的名稱可能會與模塊和軟件包名稱一起拼出,如下所示。
import company.employee;
auto employee0=Employee();
auto employee1=company.employee.Employee();
長名稱通常是不需要的,但有時會發(fā)生名稱沖突,如當引用出現(xiàn)在多個模塊中的名稱時,編譯器無法確定是哪個名稱。下面的程序?qū)⑵磳戦L名稱,以區(qū)分在兩個單獨的模塊( company 和 college。)中定義的兩個單獨的 employee 結(jié)構(gòu)。
company.employee的第一個模塊如下。
module company.employee;
import std.stdio;
class Employee {
public:
string str;
void print() {
writeln("Company Employee: ",str);
}
}
college.employee的第二個模塊如下。
module college.employee;
import std.stdio;
class Employee {
public:
string str;
void print() {
writeln("College Employee: ",str);
}
}
hello.d中的主要模塊應(yīng)保存在包含College和Company文件夾的文件夾中。如下。
import company.employee;
import college.employee;
import std.stdio;
void main() {
auto myemployee1=new company.employee.Employee();
myemployee1.str="emp1";
myemployee1.print();
auto myemployee2=new college.employee.Employee();
myemployee2.str="emp2";
myemployee2.print();
}
import關(guān)鍵字不足以使模塊成為程序的一部分,它只是使當前模塊內(nèi)部的模塊函數(shù)可用。
對于要構(gòu)建的上述程序,還必須在編譯行上指定" company/employee.d"和" college/employee.d"。
編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-
$dmd hello.d company/employee.d college/employee.d -ofhello.amx
$./hello.amx
Company Employee: emp1
College Employee: emp2
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: