小能豆

如何包含同一项目中另一个文件的模块?

rust

按照本指南,我创建了一个 Cargo 项目。

src/main.rs

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

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

我用它运行

cargo build && cargo run

并且编译没有错误。现在我试图将主模块分成两部分,但无法弄清楚如何包含另一个文件中的模块。

我的项目树看起来像这样

├── 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

是否有一个简单的示例来说明如何将当前项目中的一个模块包含到项目的主文件中?


阅读 84

收藏
2024-05-21

共1个答案

小能豆

在 Rust 中,当您的项目包含多个文件时,默认情况下每个文件都会被视为一个单独的模块。要将一个文件中的模块包含到同一项目中的另一个文件中,您需要正确使用 Rust 的模块系统。

以下是构建项目的方法:

纯文本复制代码project_root/
├── src/
│   ├── main.rs
│   └── hello.rs

在您的 中main.rs,您需要hello使用mod关键字声明模块,然后使用模块的函数:

锈复制代码mod hello;  // Import the `hello` module from `hello.rs`

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

在您的 中hello.rs,定义hello模块及其功能:

锈复制代码pub fn print_hello() {
    println!("Hello, world!");
}

确保两个文件都属于同一个项目并且位于同一个src/目录中。当您运行cargo build或 时cargo run,Cargo 会自动为您处理模块包含。

如果您仍然遇到诸如“未解析的导入”或“找不到板条箱”之类的错误,请仔细检查文件路径、模块名称,并确保该模块在您的项目结构中得到正确定义和访问。

2024-05-21