首页 > 解决方案 > 为什么只有 main.rs 可以声明 mod?

问题描述

main.rs
main2.rs
file1.rs
src/something.rs
Cargo.toml

on main.rs,做的mod file1工作,但mod file1main2.rs导致

file not found for module `file1`

为什么只能main.rs用 声明兄弟文件mod

标签: rustrust-cargo

解决方案


可以从main.rs和声明新模块lib.rs。第一个用于二进制 crate,后者用于库。需要注意的是,如果一个包同时包含两个文件,那么它将有两个同名的 crate(一个库和一个二进制文件)。你也可以有多个二进制包,如果你定义了crate roots(下面解释)src/bin- 每个文件都将被视为一个单独的二进制包。这在rust book中有详细解释。

这两个文件很特别——它们被称为crate root,因为它们形成了一个树状结构。每个模块都应该是它的一部分。您不能在该树之外定义模块。书中再次对此进行了解释。

因此,为了能够从内部定义一个新模块main2.rs,它要么必须是 a crate root- 即它必须具有 amain()并且位于其中,/src/bin/main2.rs要么它必须是模块树的一部分,从一些 crate 根下降.


推荐阅读