수색…


통사론

  • 모듈 my.package;
  • import my.package;
  • import my.package : function;
  • import fancyName = mypackage;
  • import my.package : fancyFunctionName = function;

비고

모듈은 자동으로 내용의 네임 스페이스 범위를 제공합니다. 모듈은 표면적으로 클래스와 유사하지만 그 차이는 다음과 같습니다.

  • 각 모듈에는 하나의 인스턴스 만 있고 정적으로 할당됩니다.
  • 가상 테이블이 없습니다.
  • 모듈은 상속되지 않으며 슈퍼 모듈이 없습니다.
  • 파일 당 하나의 모듈 만.
  • 모듈 기호를 가져올 수 있습니다.
  • 모듈은 항상 전역 범위에서 컴파일되며 주변 속성이나 다른 수정 자의 영향을받지 않습니다.
  • 모듈은 패키지라고하는 계층 구조로 그룹화 할 수 있습니다.

모듈은 몇 가지 보증을 제공합니다.

  • 모듈을 가져 오는 순서는 의미에 영향을주지 않습니다.
  • 모듈의 의미는 모듈의 의미에 영향을받지 않습니다.
  • 모듈 C가 모듈 A와 B를 가져 오면 B에 대한 수정은 C에있는 A에 종속 된 코드를 자동으로 변경하지 않습니다.

세계적인 수입품

import std.stdio;
void main()
{
    writeln("Hello World!");
}

여러 개의 가져 오기는 comma 하거나 새 행에서 동일한 행에 지정할 수 있습니다.

import std.stdio, std.math;
import std.datetime;
void main()
{
    writeln("2^4: ", pow(2, 4));
    writeln("Current time: ", Clock.currTime());
}

선택적 수입

선택적 가져 오기는 네임 스페이스를 정리하고 컴파일 시간을 더 빠르게하는 데 도움이됩니다. 컴파일러는 선택한 특정 함수를 구문 분석하기 만하면되기 때문입니다.

import std.stdio: writeln;
void main()
{
    writeln("Hello world");
}

현지 수입

모든 범위에서 심볼을 가져올 수도 있습니다. 범위가 필요할 때 (즉, 컴파일 할 때) 가져 오기가 조회되고 가져온 이름은 가져온 범위에서만 노출됩니다. 일반적으로 로컬 가져 오기의 범위는 함수, 구조체 및 클래스입니다.

void main()
{
    import std.stdio: writeln;
    writeln("Hello world");
}
// writeln isn't defined here

공공 수입

모듈은 public imports 를 통해 다른 모듈에 노출 될 수 있습니다.

public import std.math;
// only exports the symbol 'pow'
public import std.math : pow;

이름 변경

가져 오기에 대한 로컬 이름을 지정할 수 있습니다.이 이름을 통해 모듈의 기호에 대한 모든 참조가 다음과 같이 규정되어야합니다.

import io = std.stdio; 
void main()
{
    io.writeln("Hello world");
    std.stdio.writeln("hello!"); // error, std is undefined
    writeln("hello!");           // error, writeln is undefined
}

이름이 매우 긴 이름을 처리 할 때 이름이 변경된 가져 오기가 편리합니다.

명칭 변경 및 선택 수입

선택적 가져 오기의 이름도 변경할 수 있습니다.

void main()
{
    import std.stdio : fooln = writeln;
    fooln("Hello world");
}

모듈 선언

모듈은 소스 파일과 일대일 대응합니다. 모듈 이름은 기본적으로 경로와 확장자가 제거 된 파일 이름이며 모듈 선언으로 명시 적으로 설정할 수 있습니다. ModuleDeclarationModuleDeclaration 의 이름과 모듈이 속한 패키지를 설정합니다. 없으면 모듈 이름은 소스 파일 이름과 동일한 이름 (경로 및 확장자 제거)이됩니다.

module my.fancy.module;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow