D语言的模块是基于一个简单的概念的构建块。每个源文件是一个模块。因此,单一的文件,我们一直在编写程序中已经全部单独的模块。 默认情况下,模块的名称与不带.d扩展名文件名相同。当明确指定,该模块的名称是由module关键字,它必须显示为文件。例如在源代码中的第一个非注释行定义,假设一个源文件的名称是“employee.d”时,该模块的名称会由module关键字后跟employee指定。它如下所示。
module employee; |
class Employee |
{ |
// Class definition goes here. |
} |
该模块线是可选的。如果未指定,它是相同的文件名不带 .d 扩展名。
D支持Unicode的源代码和模块名。不过,支持Unicode文件系统的不同而不同。例如,虽然大多数Linux文件系统支持Unicode,在Windows文件系统中的文件名可能不与小写和大写字母区分。此外,大多数文件系统限制,可以在文件和目录名中使用的字符。对于便携性的原因,建议在文件名中只使用小写的ASCII字母。例如,“employee.d”将是一个命名的类eëmployëë一个合适的文件名
因此,模块的名称将包括ASCII字母,以及:
module employee; // Module name consisting of ASCII letters |
class eëmployëë |
{ |
} |
相关的模块组合被称为一个包。 D语言中包是一个简单的概念,同一个目录内的源文件被认为属于同一个包。该目录的名称变成了包,也必须指定为模块名称的第一个部分的名称。
例如,如果“employee.d”和“office.d”里面的目录中“company”,然后连同模块名指定的目录名,使它们成为同一个包的一部分:
module company.employee; |
class Employee |
{ |
} |
module company.office; |
class Office |
{ |
} |
module company.branch.employee; |
import关键字,我们一直在使用,几乎每一个程序中,到目前为止,是引入一个模块到当前模块:
import std.stdio; |
模块名称可以包含包名称。例如,上面部分表示标准输入输出是一个模块,它是在std包的一部分。
编译器直接转换包和模块名称的目录和文件名查找模块文件。
例如,两个模块员工和办公室将设为“company/employee.d”和“animal/ office.d”,分别为(或“companyemployee.d”和“companyoffice.d”,这取决于文件系统),用于company.employee和company.office。
这是在程序中使用的名称可能拼写,如下图所示的模块和包名。
import company.employee; |
auto employee0 = Employee(); |
auto employee1 = company.employee.Employee(); |
在文件夹company中的第一个employee模块如下所示。
module company.employee; |
import std.stdio; |
class Employee |
{ |
public: |
string str; |
void print(){ |
writeln("Company Employee: ",str); |
} |
} |
module college.employee; |
import std.stdio; |
class Employee |
{ |
public: |
string str; |
void print(){ |
writeln("College Employee: ",str); |
} |
} |
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(); |
} |
对于上面的程序,将建成“company/employee.d”和“college/employee.d”也必须在编译行中指定。我们将得到下面的输出编译和执行。
$ dmd hello.d company/employee.d college/employee.d -ofhello.amx |
$ ./hello.amx |
Company Employee: emp1 |
College Employee: emp2 |