包括来自另一个既不是 main.rs 也不是 lib.rs 的文件

Xob*_*tah 8 module rust

(我是 Rust 初学者)我有三个文件:main.rs、board.rs 和 case.rs。我想将case.rs包含在board.rs中,board.rs包含在main.rs中,这样board就使用case,我们可以在main中访问board。

我已经成功地将电路板添加到主要部分,但我所做的方式似乎不适用于第二部分。

我试图将每个文件的内容封装到“mod {}”中,但它并没有改变问题。我还尝试了“mod”和“use”的每种组合。

每个文件都在文件夹 src/ 中,如果可能,我希望它们不要从那里移动。

主文件

mod board;

fn main() {
    let mut b: Board = Board::new();
}
Run Code Online (Sandbox Code Playgroud)

board.rs

mod case;

pub struct Board {
    board: [ Case; 9 ]
}

// There is also the impl part of course, let's keep it short
Run Code Online (Sandbox Code Playgroud)

案例.rs

pub enum Case { Empty, Full(Player) }
Run Code Online (Sandbox Code Playgroud)

将 VSCode 与 Rust 插件一起使用,board.rs 文件第一行的“case”字样带有红色下划线,它表示:

“找不到模块case 帮助的src/case.rs 文件:将文件命名为 board\case.rs 或 board\case\mod.rs 目录中的“src””

为什么不在当前目录中搜索?

Pet*_*aro 6

您的文件可能如下所示:

案例.rs:

#[derive(Clone, Copy, Debug)]
struct Player;

#[derive(Clone, Copy, Debug)]
pub enum Case {
    Empty,
    Full(Player)
}
Run Code Online (Sandbox Code Playgroud)

board.rs:

use crate::case::Case;

#[derive(Debug)]
pub struct Board {
    board: [ Case; 9 ]
}

impl Board {
    pub fn new() -> Self {
        Self { board: [Case::Empty; 9] }
    }
}
Run Code Online (Sandbox Code Playgroud)

主.rs:

mod case;
mod board;

use crate::board::Board;

fn main() {
    println!("{:?}", Board::new());
}
Run Code Online (Sandbox Code Playgroud)

基本上你创建一个crate(一个二进制的,因为你的main.rs)并且crate可以有模块。一个模块可以是一个文件,也可以是一个文件夹(如果它碰巧有一个mod.rs)。(为了完整起见,它也可以是一个与文件系统没有直接关系的内联模块。)

您的mod语句(指示文件和文件夹的语句,而不是用于创建内联模块的语句)应放置在您的顶层crate(例如在您的main.rslib.rs)或模块级别(在您的mod.rs文件中),具体取决于在所需的结构上。

有关这方面的更多信息,请阅读 The Rust Programming Language 一书的相关章节:Packages and Crates

  • 好的,这花了我一段时间才明白 main.rs 文件开头的“mod”调用是“注册”了模块的其余文件的使用。非常感谢,这个很清楚! (3认同)