当同时存在 main.rs 和 lib.rs 时 Rust 中的模块混乱
你好!我是 Rust 新手,正在尝试理解模块系统。我有一个通过 `cargo new my_project` 创建的项目。里面有两个文件:`main.rs` 和 `lib.rs`。我以为可以在其中一个文件中声明一个模块并在另一个文件中使用它,但什么都不起作用。
这是我的结构:
```
my_project/
├── Cargo.toml
├── src/
│ ├── main.rs
│ └── lib.rs
```
我想在 `lib.rs` 中定义一个函数并从 `main.rs` 中调用它。我尝试在 `lib.rs` 中写:
```rust
mod utils {
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
}
```
然后在 `main.rs` 中:
```rust
mod utils;
use utils::greet;
fn main() {
println!("{}", greet("Alice"));
}
```
但编译器报错:`error[E0432]: unresolved import 'utils::greet'`。我也尝试了不同的组合,比如 `pub mod`、`use crate::`,但还是搞不清楚。为什么在 `lib.rs` 中定义的模块从 `main.rs` 中不可见?以及如何正确组织代码?