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

标签 module rust

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

我已成功将板添加到主程序中,但我所做的方式似乎不适用于第二部分。

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

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

主要.rs

mod board;

fn main() {
    let mut b: Board = Board::new();
}

板.rs

mod case;

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

// There is also the impl part of course, let's keep it short

案例.rs

pub enum Case { Empty, Full(Player) }

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

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

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

最佳答案

您的文件可能如下所示:

案例.rs:

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

#[derive(Clone, Copy, Debug)]
pub enum Case {
    Empty,
    Full(Player)
}

董事会.rs:

use crate::case::Case;

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

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

主要.rs:

mod case;
mod board;

use crate::board::Board;

fn main() {
    println!("{:?}", Board::new());
}

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

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

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

关于module - 包含来自另一个既不是 main.rs 也不是 lib.rs 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714619/

相关文章:

ios - 在 iOS 中找不到自定义框架路径

io - 未实现 Seek 时如何从 std::io::Read 特性中推进数据?

rust - 将C回调API转换为流

rust - Tauri 在托盘图标上单击切换应用程序可见性

rust - Tokio 的简单 TCP 回显服务器示例(在 GitHub 和 API 引用上)有什么好的详细解释?

linux - 如何从 proc 文件中读取大数据?

node.js - 我无法从 Node.js 中的自定义模块接收数据

struct - 在 Julia 中包含一个模块并从另一个模块中调用其函数之一

python - 是否有 JavaScript 的 module.exports 的 Python 模拟?

rust - pub(crate)函数声明语法是什么意思?什么时候使用? [复制]