Rust: невозможно импортировать 1 модуль из 2 файлов - PullRequest
3 голосов
/ 07 марта 2019

Это моя файловая структура:

src/
├── main.rs
├── args_parser.rs
└── trim.rs

В args_parser.rs у меня есть enum Args, который я хочу использовать в main.rs и в trim.rs, но при попытке запустить trim.rs с mod args_parser; в начале выдается следующее сообщение об ошибке:

error[E0583]: file not found for module `args_parser`
 --> src/trim.rs:1:5
  |
1 | mod args_parser;
  |     ^^^^^^^^^^^
  |
  = help: name the file either trim/args_parser.rs or trim/args_parser/mod.rs inside the directory "src"

Похоже, он ожидает, что trim.rs импортирует только файлы из этого модуля, но в Rust по примеру (https://doc.rust -lang.org / rust-by-example / mod / split.html ) там написано: «Это объявление будет искать файл с именем my.rs или my/mod.rs».

Можно ли как-нибудь импортировать этот файл из main.rs и из trim.rs?

1 Ответ

4 голосов
/ 07 марта 2019

Вы, похоже, перепутали объявление модуля (mod <name>) и импорт модуля (use <name>).Ключевое слово mod используется для объявления нового модуля либо в другом файле, либо с фигурными скобками сразу после ключевого слова.Затем вы можете импортировать модуль с помощью use.

. При использовании mod для объявления модуля в другом файле он просматривается в определенных местах.Например, когда вы используете следующий оператор в main.rs, mod.rs или lib.rs ...

mod abc;

... компилятор будет искать содержимое модуля в ./abc.rsи abc/mod.rs.Однако, если у меня есть такой же оператор в другом файле, например def.rs, он будет проверять def/abc.rs и def/abc/mod.rs.Вот почему ваш код не компилируется.

Чтобы это исправить, объявите модуль в главном файле, а затем импортируйте его в другое место.Вот как будет выглядеть код:

// in main.rs
mod args_parser;
mod trim;
use args_parser::...; // use whatever you need in main

// in trim.rs
use crate::args_parser::...; // use whatever you need in trim - note the crate:: prefix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...