Зачем мне нужны операторы `use` в подмодуле, а не в main.rs? - PullRequest
0 голосов
/ 11 сентября 2018

Я не понимаю mod или use; Я предполагаю, что mod будет импортировать файлы в проект, а use будет использовать их.

У меня есть проект с этой иерархией:

.  
|-- Cargo.lock  
|-- Cargo.toml  
|-- src  
|  |-- display.rs  
|  |-- list.rs  
|  |-- main.rs  
|  |-- parser.rs  
|  |-- sort.rs  

Зачем мне нужно use в list.rs , а не в main.rs ? Я использую функцию sorting() и print_files() в list.rs , как я использую функцию parse() и listing() в main.rs .

main.rs

mod parser;   // Ok
mod list;     // Ok
mod sort;     // Ok
mod display;  // Ok
// use parser;// The name `parser` is defined multiple times

fn main() {  
    parser::parse();
    list::listing();  
}

list.rs

//mod sort;    // file not found in module `sort`
//mod display; // file not found in module `display`
use sort;      // Ok
use display;   // Ok

pub fn listing() {
    parcours_elements();
    sort::sorting();
    display::print_files();
}

fn parcours_elements() {

}

sort.rs

pub fn sorting() {

}

display.rs

pub fn print_files() {

}

1 Ответ

0 голосов
/ 11 сентября 2018

Перво-наперво, вернитесь назад и перечитайте mod и Файловую систему . Тогда прочитайте это снова . По какой-то причине у многих людей возникают проблемы с модульной системой. Тонна полезной информации содержится в языке программирования Rust .

Полагаю, mod будет импортировать файлы в проект, а use будет их использовать.

mod foo «присоединяет» некоторый код к иерархии ящиков относительно текущего модуля.

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


Когда у вас есть mod parser в main.rs , вы говорите

найдите файл parser.rs 1 и поместите весь код в этом файле в иерархию относительно корня ящика 2 .

Когда вы пытаетесь затем добавить use parser в main.rs , вы говорите

перейдите к корню иерархии, найдите модуль parser и сделайте его доступным здесь (в корне ящика) как имя parser.

Это уже существует (потому что именно здесь определен модуль!), Поэтому вы получите ошибку.

Когда у вас есть use sort is list.rs , вы говорите

перейдите в корень иерархии, найдите модуль sort и сделайте его доступным здесь (внутри модуля list) как имя sort.

Это отлично работает.

1 Или parser / mod.rs .

2 Поскольку main.rs (или lib.rs ) являются корнями ящика.

Смотри также:

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