Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

モジュールの宣言

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

すでに見てきたように、モジュールは mod キーワードを使って宣言できます:

mod Museum {
    // ... メンバー ...
}

モジュールは、他のモジュールの中に入れ子にすることができます:

mod Museum {
    mod Entrance {
        pub def buyTicket(): Unit \ IO = 
            println("Museum.Entrance.buyTicket() was called.")
    }

    mod Restaurant {
        pub def buyMeal(): Unit \ IO = 
            println("Museum.Restaurant.buyMeal() was called.")
    }

    mod Giftshop {
        pub def buyGift(): Unit \ IO = 
            println("Museum.Giftshop.buyGift() was called.")
    }
}

これらのメソッドは、次のように呼び出せます:

def main(): Unit \ IO = 
    Museum.Entrance.buyTicket();
    Museum.Restaurant.buyMeal();
    Museum.Giftshop.buyGift()

あるいは、次のように呼び出すこともできます:

use Museum.Entrance.buyTicket;
use Museum.Restaurant.buyMeal;
use Museum.Giftshop.buyGift;
def main(): Unit \ IO = 
    buyTicket();
    buyMeal();
    buyGift()

アクセシビリティ

モジュール A の中で宣言されたモジュールメンバー m は、次のいずれかの場合に別のモジュール B からアクセスできます:

  • メンバー m が公開(pub)として宣言されている。
  • モジュール BA のサブモジュール(sub-module)である。

例えば、次のコードは許可されます:

mod A {
    mod B {
       pub def g(): Unit \ IO = A.f() // OK
    }

    def f(): Unit \ IO = println("A.f() was called.")
}

ここで f はモジュール A に対してプライベートです。しかし、BA のサブモジュールであるため、B の内部から f にアクセスできます。一方、次のコードは許可されません

mod A {
    mod B {
       def g(): Unit \ IO = println("A.B.g() was called.")
    }

    pub def f(): Unit \ IO = A.B.g() // NOT OK
}

なぜなら、gB に対してプライベートだからです。