(我是 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.rs
或 lib.rs
中)或在模块级别(在您的 mod.rs
文件中),具体取决于所需的结构。
有关这方面的更多信息,请阅读《The Rust Programming Language》一书的相关章节:Packages and Crates .
关于module - 包含来自另一个既不是 main.rs 也不是 lib.rs 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714619/