D Language
Import och moduler
Sök…
Syntax
- modul my.package;
- importera mitt.paket;
- importera my.package: funktion;
- import fancyName = mypackage;
- importera my.package: fancyFunctionName = funktion;
Anmärkningar
Moduler ger automatiskt ett namnutrymme för innehållet. Moduler liknar ytligt klasser, men skiljer sig åt i det:
- Det finns bara en instans av varje modul, och den tilldelas statiskt.
- Det finns inget virtuellt bord.
- Moduler ärver inte, de har inga supermoduler etc.
- Endast en modul per fil.
- Modulssymboler kan importeras.
- Moduler sammanställs alltid med global omfattning och påverkas inte av omgivande attribut eller andra modifierare.
- Moduler kan grupperas i hierarkier som kallas paket.
Moduler erbjuder flera garantier:
- Ordningen i vilken moduler importeras påverkar inte semantiken.
- Semantiken i en modul påverkas inte av vad som importerar den.
- Om en modul C importerar modulerna A och B kommer några modifieringar till B inte tyst att ändra kod i C som är beroende av A.
Global import
import std.stdio;
void main()
{
writeln("Hello World!");
}
Flera import kan antingen anges i samma rad, separeras med comma
eller i en ny rad.
import std.stdio, std.math;
import std.datetime;
void main()
{
writeln("2^4: ", pow(2, 4));
writeln("Current time: ", Clock.currTime());
}
Selektiv import
Selektiv import kan hjälpa till att rensa namnutrymmet och påskynda kompileringstiden ännu mer, eftersom kompilatorn bara behöver analysera specifika, valda funktioner.
import std.stdio: writeln;
void main()
{
writeln("Hello world");
}
Lokal import
Du kan också importera symboler i valfritt omfång, importen kommer endast att letas upp när omfattningen behövs (dvs. kompilerad) och de importerade namnen kommer endast att exponeras i det importerade omfånget. Vanligtvis är utrymmet för lokal import funktioner, strukturer och klasser.
void main()
{
import std.stdio: writeln;
writeln("Hello world");
}
// writeln isn't defined here
Offentlig import
Moduler kan exponeras för andra moduler med public imports
.
public import std.math;
// only exports the symbol 'pow'
public import std.math : pow;
Byt namn på import
Ett lokalt namn för en import kan ges, genom vilket alla referenser till modulens symboler måste kvalificeras med:
import io = std.stdio;
void main()
{
io.writeln("Hello world");
std.stdio.writeln("hello!"); // error, std is undefined
writeln("hello!"); // error, writeln is undefined
}
Döpt namn på import är praktiskt när man handlar med mycket långa importnamn.
Byt namn och selektiv import
Selektiv import kan också byta namn.
void main()
{
import std.stdio : fooln = writeln;
fooln("Hello world");
}
Moduldeklaration
Modulerna har en-till-en-korrespondens med källfiler. Modulnamnet är som standard filnamnet med sökvägen och tillägget avskaffat och kan ställas in exakt med moduldeklarationen. ModuleDeclaration
anger namnet på modulen och vilket paket den tillhör. Om det saknas anses modulnamnet vara samma namn (borttagen från sökvägen och förlängningen) för källfilens namn.
module my.fancy.module;