Rust - использовать модуль в родительском каталоге

У меня файловая структура выглядит примерно так:

src/
--clients/
----queue_client/
------mod.rs
--data_evaluator/
----data_evaluator.rs

В data_evaluator я хочу использовать модуль queue_client, но когда я делаю mod queue_client в data_evaluator.rs-, я получаю следующую ошибку - File not found for module queue_client. Он находит модуль только в том случае, если я перемещаю его в папку data_evaluator.

У меня вопрос: как правильно использовать модули, которые находятся за пределами каталога кода потребителя? Приносим извинения, если есть простой способ сделать это, я довольно долго пытался поискать и не мог найти способ.


person WhoopsBing    schedule 26.04.2021    source источник
comment
Кажется, вы путаете mod и use. Использование определяет новый модуль и должен находиться в непосредственном родительском элементе нового модуля. Итак, ваша структура должна быть crate root { mod clients { mod queue_client }; mod data_evaluator { use crate::clients::queue_client } }. Также обратите внимание, что mod.rs немного устарел: с версии 2018 года src/main.rs; module/submodule.rs; module.rs является предпочтительной файловой структурой. Также обратите внимание, что вы можете использовать только use элементов, отмеченных как pub.   -  person Ivan C    schedule 27.04.2021
comment
Отвечает ли это на ваш вопрос? файлы модов Rust в той же папке по сравнению с использованием   -  person Jmb    schedule 27.04.2021


Ответы (1)


Вы, кажется, немного запутались. В Rust вы строите дерево модулей. Вы используете mod, чтобы зарегистрировать модуль как подмодуль вашего текущего модуля. Вы используете use, чтобы использовать модуль в вашем текущем модуле. Эта статья может прояснить некоторые вещи: http://www.sheshbabu.com/posts/rust-module-system/

Кроме того, чтобы использовать модуль, который находится выше в дереве, чем ваш текущий модуль, вы используете crate для доступа к корню вашего дерева модулей. Итак, в вашем случае crate::clients::queue_client.

person Rein F    schedule 26.04.2021