Я определил структуру и метод следующим образом:
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