モジュールの宣言
💡 お知らせ: このドキュメントは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)として宣言されている。 - モジュール
BがAのサブモジュール(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 に対してプライベートです。しかし、B は A のサブモジュールであるため、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
}
なぜなら、g は B に対してプライベートだからです。