サーチ…


構文

  • モジュールmy.package;
  • import my.package;
  • import my.package:function;
  • import fancyName = mypackage;
  • import my.package:fancyFunctionName = function;

備考

モジュールは自動的に内容の名前空間の範囲を提供します。モジュールは外見上はクラスに似ていますが、その点で異なります:

  • 各モジュールのインスタンスは1つしかなく、静的に割り当てられます。
  • 仮想テーブルはありません。
  • モジュールは継承されず、スーパーモジュールもありません。
  • ファイルごとに1つのモジュールのみ。
  • モジュールシンボルをインポートできます。
  • モジュールは常にグローバルスコープでコンパイルされ、周囲の属性やその他の修飾子の影響を受けません。
  • モジュールはパッケージと呼ばれる階層にグループ化できます。

モジュールはいくつかの保証を提供します:

  • モジュールがインポートされる順序は、セマンティクスに影響しません。
  • モジュールのセマンティクスは、それをインポートすることによって影響を受けません。
  • モジュールCがモジュールAとBをインポートした場合、Bに変更を加えても、Aに依存するCのコードは静かに変更されません。

グローバル輸入

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");
}

モジュール宣言

モジュールは、ソースファイルと1対1で対応しています。モジュール名は、デフォルトではパスと拡張子を取り除いたファイル名であり、モジュール宣言で明示的に設定することができます。 ModuleDeclarationは、モジュールの名前とそれが属するパッケージを設定します。存在しない場合、モジュール名は、ソースファイル名と同じ名前(パスと拡張子の削除)とみなされます。

module my.fancy.module;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow