Не могу написать `use std :: {fs :: self, io :: self}` из-за многократного использования `self` - PullRequest
1 голос
/ 16 апреля 2020

Код

use std::{
    fs::self,
    io::self,
};

fn rmdir(path: impl AsRef<std::path::Path>) -> io::Result<()> {
    fs::remove_dir(path)
}

Ошибка

error[E0430]: `self` import can only appear once in an import list
 --> src/lib.rs:2:5
  |
2 |     fs::self,
  |     ^^^^^^^^ can only appear once in an import list
3 |     io::self,
  |     -------- another `self` import appears here

( Детская площадка )

Почему я не могу написать module::self с двумя разными модулями? Я подумал, что мог бы use модули с ::self, чтобы прояснить, что это модули, а не функции.

Если я добавлю фигурную скобку, то это разрешено:

use std::{
    fs::{self},
    io::{self},
};

Есть ли веская причина для этого, или это ошибка компилятора / дефект дизайна языка?

1 Ответ

2 голосов
/ 16 апреля 2020

Обычно вы ожидаете использовать use std::io::{self, BufReader} для обозначения импорта std::io и std::io::BufReader.

use std::{ fs::self, io::self }; 

- это просто

use std::{ fs, io };

E0430 - проверка для двух self s в одной и той же области действия {}. Это делает что-то вроде

use something::{self, self}; 

незаконным. Когда вы помещаете каждый ::self в его собственную область, это законно.

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