Чтобы получить доступ к parser/parser.rs
и another.rs
из любой точки вашей корзины, вы можете использовать абсолютные пути (здесь я также использую вложенные пути , что не требуется, но делает структуру модулей более понятной):
use crate::{
parser::parser,
another,
};
Вы также можете использовать относительные пути с super
, который относится к родительскому модулю.Более подробная информация доступна в @ ответе Измаила .
Что касается структуры вашего кода, то кажется странным, почему у вас есть mod.rs
(не неправильно, но просто странно, особенно 0
; вы можете полностью покинуть 1
и 2
, если хотите, но 0
может сбить вас с толку):
app/src
main.rs
another.rs
mod.rs // 0
parser/
parser.rs
mod.rs // 1
solver/
solve.rs
mod.rs // 2
Относительно 1
и 2
:
mod.rs
использовался в выпуске 2015 года для возможности создания вложенных модулей, но больше не требуется в выпуске 2018 года (при условии, что выиспользуется новейшая версия по умолчанию для грузового издания 2018 года, см. Что такое издания? ):
Подкаталог foo.rs
и foo/
могут сосуществовать;mod.rs
больше не требуется при размещении подмодулей в подкаталоге.
Относительно 0
:
Модуль, которым вы являетесьопределение через это на самом деле называется mod
(не src
, как вы, возможно, ожидали, хотя я совсем не уверен, что вы ожидали здесь), я не уверен, что вы хотели это сделать.Однако, если вы это сделали, есть еще способ получить к нему доступ через r#
- необработанные идентификаторы , доступные с Rust 1.30:
use crate::r#mod;
Если вы не хотите писать r#mod
повсюду, вы можете использовать as
следующим образом:
use crate::r#mod as new_name;
Затем вы можете обратиться к модулю через new_name
.