Из сообщения об ошибке похоже, что ваш файл addr.rs находится не в том месте (src / addr.rs?).Будет работать следующий макет проекта:
├── src
│ ├── main.rs
│ ├── person
│ │ └── addr.rs
│ └── person.rs
Как и было бы:
├── src
│ ├── main.rs
│ ├── person
│ │ └── addr
│ │ └── mod.rs <== this is addr.rs renamed
│ └── person.rs
Модули являются иерархическими и образуют дерево из корня ящика, либо src/main.rs
, либо src/lib.rs
.
Корень ящика может ссылаться на модуль, который объявлен в другом файле, например,
mod module1
Затем он ожидает найти файл с именем src/module1.rs
или src/module1/mod.rs
.
Но если module1
ссылается на другой модуль, module2
, ожидается, что он будет либо src/module1/module2.rs
, либо src/module1/module2/mod.rs
, вложенным в module1
.
См. Разделение модулей на разныефайлы в Rust Book.
Чтобы main.rs
также использовал Addr
, person.rs
необходимо объявить модуль addr
общедоступным:
pub mod addr;
Тогда main.rs
может ссылаться на него как:
let myAddr = person::addr::Addr::new();
или
use person::addr;
// ...
let myAddr = addr::Addr::new();