RUST:是否有更优雅的方式来导入 mod?

RUST: Is there a more elegent way to import mod?

这是我的项目结构:

/src
  -main.rs
  -sub_mod.rs
  -sub_folder/
   --mod.rs

在 sub_mod.rs 中,如果我像这样导入 sub_folder,cargo 不会警告我:

#[path = "./sub_folder/mod.rs"]
mod sub_folder;

但我做不到

mod sub_folder

但在 main.rs 中有效!!

在 sub_mod.rs 中是否有更温和的方法来导入 sub_folder?

你几乎不应该使用 #[path] 属性。 它用于将源代码放在 非标准 位置,并且它使用它很容易出错。相反,请确保您的 mod 声明和文件位置相互匹配。

所以,如果路径是src/sub_folder/mod.rs(或src/sub_folder.rs),那么你应该在main.rs中声明模块,因为main.rs(或lib.rs如果你这样做的话)是板条箱根,所有 top-level 模块被声明的地方。即main.rs包含

mod sub_folder;
mod sub_mod;

这两个模块是板条箱中的兄弟。然后为了 sub_modimport (不定义)sub_folder,它应该包含:

use super::sub_folder;

或者,等价地(绝对而不是相对路径),

use crate::sub_folder;

提示:如果您使用的是与 rust-analyzer 兼容的编辑器,您可以让它帮助您正确创建模块。不要创建文件;取而代之的是,在现有源代码的某个地方写入 mod my_module;,等待“丢失文件”错误出现,然后 运行 提供的修复程序“创建模块”。 rust-analyzer 将为您在正确的位置创建文件。