D Language
輸入とモジュール
サーチ…
構文
- モジュール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