* モジュール [#wc5774f5] #contents ** 概要 [#oa4c9f96] #code(){{ Module: ModuleDecl ExternalModuleDecls ModuleDef }} - モジュール == 1つのソースファイル - モジュールには1つのpublicな型と0個以上のprivateな型を定義できる #code(d,){{ module Project.A; // Project名前空間のAという名前のモジュールをこのソースファイルで定義することを宣言 pod A // publicな型はモジュールの最後の名前と同一である必要がある { B b; C c; }; // privateな型は何個でも宣言できる private pod B { int x; }; private pod C { float x; }; }} ** モジュール宣言 - module [#ofbc1f6d] #code(){{ ModuleDecl: "module" ModulePath ";" ModulePath: NamespacePath "." ModuleName NamespacePath: Namespace Namespace "." NamespacePath Namespace: Identifier ModuleName: Identifier }} - ソースファイルの何よりも先に記述するキーワード - 1階層以上の名前空間とこのソースファイルで定義する型の名前を続けて記述する #code(d,){{ module Hoge.Foo; // Hoge名前空間のFooという型をこのソースで記述します module Foo; // エラー:名前空間がない }} ** 外部モジュール宣言 - import/using [#gb466143] #code(){{ ExternalModuleDecls: ExternalModuleDecl ExternalModuleDecl ExternalModuleDecls ExternalModuleDecl: ImportExternalModule UsingExternalModule ImportExternalModule: "import" ModulePath ";" UsingExternalModule "using" ModulePath ";" }} - 外部のモジュールを使う宣言 - importキーワードを使うと名前空間付きのフルパスで記述する必要がある。 - usingキーワードを使うと名前空間を省略することができる #code(d,){{ module Project.A; using Project.B; import Project.C; class A { B b; // usingを使ったのでProject.Bの"Project."の部分が省略できる Project.C c; // importを使ったので省略ができない }; }} |