D編程 模塊

2021-09-01 10:38 更新

模塊是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?? { }

Packages包

相關(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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號