Включение файла из другого файла, который не является main.rs или lib.rs - PullRequest
0 голосов
/ 22 июня 2019

(я новичок в Rust) У меня есть три файла: main.rs, board.rs и case.rs. Я хочу включить case.rs в board.rs и board.rs в main.rs, чтобы доска использовала case, и мы можем получить доступ к плате в main.

Я успешно добавил доску в основную, но способ, который я сделал, похоже, не работает для второй части.

Я пытался инкапсулировать содержимое каждого файла в "mod {}", но это не меняет проблему. Также я попробовал все комбинации «мод» и «использование».

Каждый файл находится в папке src /, и я бы хотел, чтобы он не перемещался оттуда, если это возможно.

main.rs

mod board;

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

board.rs

mod case;

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

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

case.rs

pub enum Case { Empty, Full(Player) }

При использовании VSCode с плагином Rust слово "case" в первой строке файла board.rs подчеркнуто красным и говорит:

"SRC / case.rs файл не найден для модуля case help: назовите файл либо board \ case.rs, либо board \ case \ mod.rs внутри каталога "src" "

Почему он не ищет в текущем каталоге?

1 Ответ

1 голос
/ 22 июня 2019

Ваши файлы могут выглядеть следующим образом:

case.rs:

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

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

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] }
    }
}

main.rs:

mod case;
mod board;

use crate::board::Board;

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

По сути, вы создаете crate (двоичный файл из-за вашего main.rs), и у crate могут быть модули.Модуль может быть файлом или папкой (если он имеет mod.rs).(И для полноты картины это может быть также модуль inline , не имеющий прямого отношения к файловой системе.)

Ваши операторы mod (те, которые указывают на файлы и папки).а не те, которые вы используете для создания встроенных модулей), должны размещаться либо на верхнем уровне вашего crate (например, в ваших main.rs или lib.rs), либо на уровнях модулей (в ваших файлах mod.rs)в зависимости от желаемой структуры.

Для получения дополнительной информации об этом, пожалуйста, прочитайте соответствующую главу книги The Rust Programming Language: Пакеты и ящики .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...