在Rust 2018中使用模块时,如何解决错误“根目录中没有模块”?

时间:2018-12-28 04:48:23

标签: module rust 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来解决此问题(这显然行不通,但是到底怎么了?会尝试)。但是,这些都不起作用。

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

2 个答案:

答案 0 :(得分:3)

您需要将mod.rs移至lexer.rs

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

此更改描述为here

答案 1 :(得分:2)

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

mod lexer; // This, not `use`    

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

请花一些时间重新阅读The Rust Programming Language,尤其是有关Separating Modules into Different Files的部分。