在 Rust 2018 中使用模块时如何解决错误 "no module in the root"?

How do I resolve the error "no module in the root" when using a module in Rust 2018?

我正在开发一个项目,该项目使用 src/ 下文件夹中的一些本地模块。我目前正在使用 Rust 2018 版,其中一个主要变化是 handling of imports/use statements.

我的模块代码全部正常工作,但是当我开始将它组合在一起用于整个项目时,我开始收到此错误:

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 来解决此问题(这显然不起作用,但到底是什么,我想我会试试的)。但是,其中 none 个有效。

如何解决 no 'lexer' in the root 错误?

您需要将 mod.rs 移动到 lexer.rs:

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

此更改描述为 here

仍然需要声明main.rs包含一个模块:

mod lexer; // This, not `use`    

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

请花时间重读The Rust Programming Language, specifically the section about Separating Modules into Different Files