このガイド に従って、貨物プロジェクトを作成しました。
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つのモジュールをプロジェクトのメインファイルに含める簡単な例はありますか?
また、Rust 1.37.0を実行しています。
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!");
}
フォルダーにmod.rs
ファイルが必要です。 Rust by Example は、より適切に説明しています。
$ tree .
.
|-- my
| |-- inaccessible.rs
| |-- mod.rs
| |-- nested.rs
`-- split.rs
main.rs
mod my;
fn main() {
my::function();
}
mod.rs
pub mod nested; //if you need to include other modules
pub fn function() {
println!("called `my::function()`");
}