(我是 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””
为什么不在当前目录中搜索?
您的文件可能如下所示:
案例.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.rs或lib.rs)或模块级别(在您的mod.rs文件中),具体取决于在所需的结构上。
有关这方面的更多信息,请阅读 The Rust Programming Language 一书的相关章节:Packages and Crates。