1. ホーム

[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?

2022-04-17 23:55:23

質問

以下による このガイド Cargoのプロジェクトを作成しました。

src/main.rs

fn main() {
    hello::print_hello();
}

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

を使って実行しています。

cargo build && cargo run

で、エラーなくコンパイルされます。今、メインモジュールを2つに分割しようとしていますが、他のファイルからモジュールをインクルードする方法がわかりません。

私のプロジェクトツリーは次のようなものです。

├── src
    ├── hello.rs
    └── main.rs

とファイルの中身を表示します。

src/main.rs

use hello;

fn main() {
    hello::print_hello();
}

src/hello.rs

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

でコンパイルすると cargo build 私は得る

error[E0432]: unresolved import `hello`
 --> src/main.rs:1:5
  |
1 | use hello;
  |     ^^^^^ no `hello` external crate

私は、コンパイラの提案にしたがって main.rs に変更しました。

#![feature(globs)]

extern crate hello;

use hello::*;

fn main() {
    hello::print_hello();
}

しかし、これでもあまり役に立たず、今度はこうなってしまいました。

error[E0463]: can't find crate for `hello`
 --> src/main.rs:3:1
  |
3 | extern crate hello;
  | ^^^^^^^^^^^^^^^^^^^ can't find crate

現在のプロジェクトから1つのモジュールをプロジェクトのメインファイルにインクルードする方法についての些細な例はありますか?

どのように解決するのですか?

は必要ありません。 mod hello の中で hello.rs ファイルを作成します。クレートルート以外のファイル内のコード ( main.rs 実行可能ファイルの場合 lib.rs はライブラリの場合)は、自動的にモジュールに名前空間が設定されます。

のコードをインクルードするには hello.rs の中で main.rs を使用します。 mod hello; . の中にあるコードに展開されます。 hello.rs (以前と全く同じように)。ファイル構造はそのままで、コードを少し変更する必要があります。

main.rs :

mod hello;

fn main() {
    hello::print_hello();
}

hello.rs :

pub fn print_hello() {
    println!("Hello, world!");
}