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;


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow