モジュール
概要
0
| Module:
ModuleDecl ExternalModuleDecls ModuleDef
|
- モジュール == 1つのソースファイル
- モジュールには1つのpublicな型と0個以上のprivateな型を定義できる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-
|
|
!
-
|
!
-
|
!
| module Project.A;
pod A {
B b;
C c;
};
private pod B
{
int x;
};
private pod C
{
float x;
};
|
モジュール宣言 - module
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ModuleDecl:
"module" ModulePath ";"
ModulePath:
NamespacePath "." ModuleName
NamespacePath:
Namespace
Namespace "." NamespacePath
Namespace:
Identifier
ModuleName:
Identifier
|
- ソースファイルの何よりも先に記述するキーワード
- 1階層以上の名前空間とこのソースファイルで定義する型の名前を続けて記述する
1
2
|
| module Hoge.Foo; module Foo;
|
外部モジュール宣言 - import/using
0
1
2
3
4
5
6
7
8
9
10
11
12
| ExternalModuleDecls:
ExternalModuleDecl
ExternalModuleDecl ExternalModuleDecls
ExternalModuleDecl:
ImportExternalModule
UsingExternalModule
ImportExternalModule:
"import" ModulePath ";"
UsingExternalModule
"using" ModulePath ";"
|
- 外部のモジュールを使う宣言
- importキーワードを使うと名前空間付きのフルパスで記述する必要がある。
- usingキーワードを使うと名前空間を省略することができる
1
2
3
4
5
6
7
8
9
10
|
-
|
|
!
| module Project.A;
using Project.B;
import Project.C;
class A
{
B b; Project.C c; };
|
|