Я пытаюсь создать псевдоним типа Peekable
slice::Iter
, но компилятор продолжает жаловаться, что мне нужен параметр времени жизни.
Этот итератор используется в нескольких местах и всегда повторяется по одному и тому же типу. Чтобы сделать код более кратким, я хотел бы использовать псевдоним типа.
Я уже пробовал (примеры кода ниже):
- Добавление параметра продолжительности жизни в структуру, по которой он повторяется, и передать его в качестве аргумента универсальному, но безрезультатно.
- Добавление параметра времени жизни внутри итератора
use std::{iter::Peekable, slice::Iter};
pub struct MyStruct {
pub arg1: i32,
pub arg2: i32,
pub arg3: MyEnum,
}
pub enum MyEnum {
Default,
}
// mutable since I want to call .peek() and .next() on my iterator
type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
Обратите внимание, что вышеприведенное прекрасно работает, если я не использую псевдоним типа, то есть я использую его непосредственно в коде:
pub fn my_fn(it: &mut Peekable<Iter<MyStruct>>) -> i32 { /* ... */ }
Я получаю следующую ошибку:
error[E0106]: missing lifetime specifier
--> src/lib.rs:14:40
|
14 | type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
| ^^^^^^^^^^^^^^ expected lifetime parameter
Я также пробовал:
... = &'a Peekable<Iter<&'a MyStruct>>;
... = &'a Peekable<Iter<MyStruct+ 'a>>;
Не работает, даже при добавлении параметра времени жизни к MyStruct
. Я не очень понимаю, как Rust хочет, чтобы я определил параметр времени жизни. (В общем, я не до конца понимаю эту концепцию, так как я только начал программировать на Rust)