11

我正在开发一个项目,该项目使用src/. 我目前正在使用 Rust 2018 版,其中一项主要更改是处理 imports/ usestatements

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

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.rs

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

词法分析器/mod.rs

pub mod lexer;

main.rs

use crate::lexer;

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

我试图通过将语句更改use lexer为 asuse self::lexer并添加来解决此问题extern crate lexer(这显然不起作用,但到底是什么,我想我会尝试一下)。然而,这些都没有奏效。

我能做些什么来解决这个no 'lexer' in the root错误?

4

2 回答 2

12

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

mod lexer; // This, not `use`    

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

请花时间重新阅读Rust 编程语言,特别是关于将模块分离为不同文件的部分。

于 2018-12-30T01:47:50.000 回答
5

mod.rs你需要搬到lexer.rs

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

此处描述了此更改。

于 2018-12-28T05:56:02.307 回答