サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

Master mind in Rust; part 6 ファイル分割とモジュール

今回やること

  • ファイル分割

モジュール化

Rust では、モジュールを使ってプログラムを構造化することができます。モジュールは、関連する関数、構造体、トレイト、型などをグループ化するための仕組みです。 また、今まではmain.rsのみでプログラムを書いていましたが、モジュールを使うことで、複数のファイルに分割することができます。

現在のフォルダ構成

.
├── Cargo.lock
├── Cargo.toml
└── src
    └── main.rs

まずは、srcフォルダに機能ごとに新しいファイルを作成します。

.
├── Cargo.toml
└── src
    ├── def.rs
    ├── main.rs
    ├── policy.rs
    └── utils.rs

例えば、def.rsの中身は以下のようにしました。 def.rsファイルを作成することでdefモジュールが作成されます。 このモジュールの中身をmain.rsやその他のモジュールから利用するためにpubをつけて公開します。

pub type Code = Vec<usize>;
pub type CodeSet = Vec<Code>;
pub type Hint = (usize, usize);

#[derive(Debug)]
pub struct Context {
    pub color_num: usize,
    pub pin_num: usize,
    pub duplicate: bool,
}

次にpolicy.rsの中身は以下のようにしました。crate::defと書くことで、defモジュールの中身を利用することができます。crateとは、プログラムのルートモジュールを指すキーワードです。

  • use crate::def; によってdef::CodeSetを使うことができます。
  • use crate::def::CodeSetとすると単にCodeSetと書くことができます。
  • useをかかなかった場合でも、crate::def::CodeSetと書けば良いです。
use crate::def;

// select guess from guess set
pub fn first_pick(guess_set: &def::CodeSet) -> def::Code {
    guess_set[0].clone()
}

最も重要なことはmain.rsで次のようにmodを使ってモジュールを読み込むことです。これによりrootモジュールにdef, utils, policyモジュールが追加されます。

mod def;
mod utils;
mod policy;

コード

参考

関連