Как устранить ошибку «нет модуля в корне» при использовании модуля в Rust 2018? - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над проектом, который использует некоторые локальные модули в папках под src/.В настоящее время я использую редакцию Rust 2018, и одним из основных изменений для этого является обработка операторов import / use .

Мой код модуля работает правильно, но, как яначал собирать его для использования в проекте в целом, я начал получать эту ошибку:

error[E0432]: unresolved import `crate::lexer`
 --> src/main.rs:1:5
  |
1 | use crate::lexer;
  |     ^^^^^^^^^^^^ no `lexer` in the root

В настоящее время мой код настроен так:

src/
 | main.rs
 | lexer/
    | mod.rs
    | lexer.rs

lexer / lexer.rs

pub fn lex_stuff() -> Vec<String> { vec![String::new("test")] }

lexer / mod.rs

pub mod lexer;

main.rs

use crate::lexer;

fn main() {
    println!("Hello, world!");
    lexer::lexer::lex_stuff();
}

Я попытался решить эту проблему, изменив выражение на use lexer, а также use self::lexer и добавив extern crate lexer (что, очевидно, не работает, но, черт возьми, подумал, что я попробуюЭто).Однако ни один из них не сработал.

Что можно сделать, чтобы устранить ошибку no 'lexer' in the root?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Вы все еще должны объявить, что main.rs содержит модуль:

mod lexer; // This, not `use`    

fn main() {
    println!("Hello, world!");
    lexer::lexer::lex_stuff();
}

Пожалуйста, найдите время, чтобы перечитать Язык программирования Rust , в частности, раздел о Разделение модулей на разные файлы .

0 голосов
/ 28 декабря 2018

Вам необходимо переместить mod.rs в lexer.rs:

src/
 | main.rs
 | lexer.rs
 | lexer/
    | lexer.rs
    | tokens.rs

Это изменение описано здесь .

...