生命周期表示法出现奇怪的编译错误:“预期的`:`,找到的>>`”

时间:2019-01-07 03:25:35

标签: compiler-errors rust lexer

我已经定义了这样的结构和方法:

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

我不确定为什么编译器会抱怨,而我可以说,生命周期表示法对我来说似乎还不错。

Rust Playground

1 个答案:

答案 0 :(得分:0)

我刚刚意识到,构造函数不需要生存期。

正确的符号是

let mut lexer = Lexer {

不是

let mut lexer = Lexer<'a> {