Как написать оператор использования для импорта имени, но использовать его как mod1 :: mod2 :: item? - PullRequest
0 голосов
/ 10 июля 2019

Учитывая, что файл src/A/B/C.rs существует, какой оператор use я бы записал в файл src/D.rs, чтобы я мог получить доступ к C как A::B::C?

Я пробовал: use A::B::C, но тогда я не могу назвать его A::B::C. Я пробовал: use A::{B::C}, но тогда я могу назвать его только B::C.

Ответы [ 2 ]

2 голосов
/ 10 июля 2019
mod A;

fn main() {
    A::B::C::ModuleCfn();
}

Вот файлы и модули, которые я пробовал:

src/A.rs =>
    pub mod B;
src/A/B.rs =>
    pub mod C;
src/A/B/C.rs =>
    pub fn ModuleCfn() { }
0 голосов
/ 11 июля 2019

Предположим, я хочу сослаться на:

actix_web_httpauth::extractors::bearer::BearerAuth

как

bearer::BearerAuth

и

actix_web_httpauth::headers::www_authenticate::bearer::Error

as

bearer::Error

Это невозможно, потому что для этого потребуются два утверждения, которые конфликтуют:

use actix_web_httpauth::extractors::bearer;
use actix_web_httpauth::headers::www_authenticate::bearer;

По общему признанию,это крайний случай, но мне кажется странным, что невозможно указать подмножество пространства имен, сохраняя при этом частичный путь к этому пространству имен.

Наиболее разумным решением кажется что-то вроде:

use actix_web_httpauth::extractors::bearer as xbearer;
use actix_web_httpauth::headers::www_authenticate::bearer as ybearer;

...

xbearer::BearerAuth ...
ybearer::Error ...

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