【发布时间】:2019-01-07 03:25:35
【问题描述】:
我已经定义了一个这样的结构和方法:
struct Lexer<'a> {
input: String,
pos: CharIndices<'a>,
next_pos: Peekable<CharIndices<'a>>,
ch: char,
}
impl<'a> Lexer<'a> {
pub fn new(input: String) -> Lexer<'a> {
let mut lexer = Lexer<'a> {
input,
pos: input.char_indices(),
next_pos: input.char_indices().peekable(),
ch: char::from(0 as u8),
};
lexer
}
}
编译时出现错误
error: expected `:`, found `>`
--> src/lexer/mod.rs:15:33
|
15 | let mut lexer = Lexer<'a> {
| ^ expected `:`
但是,按照它的要求做并将违规行更改为let mut lexer = Lexer<'a:> { 是没有意义的,重新编译确认这确实是不正确的。
error: expected `while`, `for`, `loop` or `{` after a label
--> src/lexer/mod.rs:15:34
|
15 | let mut lexer = Lexer<'a:> {
| ^ expected `while`, `for`, `loop` or `{` after a label
我不确定编译器为什么会抱怨,但我只能说生命周期符号对我来说看起来不错。
【问题讨论】:
-
您的代码无法编译,因为
0不是字符,这个问题只是一个语法错误。你必须写Lexer::<'a>或更短的Lexer(这也不是MCVE,因为你可以省略Lexer中的所有字段,只添加需要<'a>的内容,例如PhantomData) -
Lexer<'a可以是表达式的开头,将名为Lexer的变量与像'a: loop { break 'a 4; }这样的命名循环表达式进行比较。 Example -
@hellow 0 不是字符,但编译器不会给出错误,直到相关错误得到解决,所以我没有抓住它。此代码还有(许多)其他错误,但在修复相关错误之前,编译器看不到任何错误。不管怎样,我已经更新了我的问题。
标签: compiler-errors rust lexer