包括一个内部模块会产生“也许缺少板条箱'module2'”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包括一个内部模块会产生“也许缺少板条箱'module2'”相关的知识,希望对你有一定的参考价值。

我具有以下项目结构:

src
├── module1
│   └── mod.rs
├── main.rs
└── module2
    └── mod.rs

但我得到一个

error[E0432]: unresolved import `crate::module2`
 --> src/module2/mod.rs:6:14
  |
6 |   use crate::module2::SomeStruct;
  |              ^^^^^^^ maybe a missing crate `module2`?

当文件内容如下时。

src / module1 / mod.rs

pub mod module1 {

  // -- snip --

  use crate::module2::SomeStruct;

  }

  // -- snip --

}

src / module2 / mod.rs

pub mod module2 {

  // --snip--

  pub struct SomeStruct;

  }

  // -- snip--

}

src / main.rs

mod module1;

fn main() {
  // -- snip--
}

为什么会这样,如何解决?所有相关的模块和结构都是公开的。 A relevant chapter in the Rust Book

答案

模块的声明(例如pub mod module1)发生在该模块之外。模块声明有two kinds个:其中一个声明位于紧随其后(在大括号内),另一个声明位于另一个文件中。

对于单独文件中的模块,您只需要说pub mod module1; 在该模块的父目录中。对于您的结构,您需要在pub mod module1;中包含pub mod module2main.rs

在模块文件中(例如src/module1/mod.rs),您根本不需要pub mod module1。您可以直接将其项目保存在文件中。

因此您的设置应该是

src/main.rs

pub mod module1;
pub mod module2;

src/module1/mod.rs

// -- snip --

use crate::module2::SomeStruct;

// -- snip 

src/module2/mod.rs

// --snip--

pub struct SomeStruct;

// -- snip--

以上是关于包括一个内部模块会产生“也许缺少板条箱'module2'”的主要内容,如果未能解决你的问题,请参考以下文章

python模块之random

时钟复位篇

rrandom模块随机产生数字

python常见模块之random模块

使用VSCode扩展包括运行时类型定义

杂谈11.py