Странная ошибка компиляции с пожизненной нотацией: "ожидается": `, найдено`> `" - PullRequest
0 голосов
/ 07 января 2019

Я определил структуру и метод следующим образом:

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 голосов
/ 07 января 2019

Я только что понял, что для конструктора нет необходимости в жизни.

Правильное обозначение:

let mut lexer = Lexer {

не

let mut lexer = Lexer<'a> {
...