* モジュール [#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を使ったので省略ができない
};

}}

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS