ファイルシステム階層
モジュールの内容を省略すると、Rust はそれを別のファイル内で探します:
// Copyright 2022 Google LLC // SPDX-License-Identifier: Apache-2.0 mod garden;
これにより、garden モジュールの内容が src/garden.rs にあることを Rust に伝えます。 同様に、garden::vegetables モジュールは src/garden/vegetables.rs にあります。
crate ルートは次の場所にあります:
src/lib.rs(ライブラリ crate の場合)src/main.rs(バイナリ crate の場合)
ファイル内で定義されたモジュールも、「内部ドキュメントコメント」を使って文書化できます。 これらは、それを含むアイテムを文書化します。この場合はモジュールです。
// Copyright 2022 Google LLC // SPDX-License-Identifier: Apache-2.0 //! このモジュールは garden を実装しており、高性能な発芽実装を含みます。 // このモジュールから型を再エクスポートします。 pub use garden::Garden; pub use seeds::SeedPacket; /// 指定された seed packet をまきます。 pub fn sow(seeds: Vec<SeedPacket>) { todo!() } /// 準備ができている garden 内の収穫物を収穫します。 pub fn harvest(garden: &mut Garden) { todo!() }
-
Rust 2018 より前は、モジュールは
module.rsではなくmodule/mod.rsに配置する必要がありました。これは 2018 以降の edition でも引き続き有効な代替手段です。 -
filename/mod.rsの代わりにfilename.rsが導入された主な理由は、mod.rsという名前のファイルが多数あると、IDE で区別しにくくなるためです。 -
メインモジュールがファイルであっても、より深いネストではフォルダーを使用できます:
src/ ├── main.rs ├── top_module.rs └── top_module/ └── sub_module.rs -
Rust がモジュールを探す場所は、コンパイラディレクティブで変更できます:
// Copyright 2022 Google LLC // SPDX-License-Identifier: Apache-2.0 #[path = "some/path.rs"] mod some_module;これは、たとえば Go の慣習に似せて、モジュールのテストを
some_module_test.rsという名前のファイルに配置したい場合に便利です。