capypad
0 Tage Serie
rust / expert
Snippet

Generic Associated Types (GATs) für Iteration

Generic Associated Types ermöglichen es assoziierten Typen, Lebensdauer- oder Typparameter zu tragen. Dies ist essenziell für 'Lending Iteratoren', bei denen das vom Iterator gelieferte Element vom Iterator selbst leiht – ein Muster, das Standard-Iteratoren nicht effizient ausdrücken können.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
trait LendingIterator {
type Item<'a> where Self: 'a;
fn next<'a>(&'a mut self) -> Option<Self::Item<'a>>;
}
 
struct MyStream(Vec<u32>);
 
impl LendingIterator for MyStream {
type Item<'a> = &'a u32;
fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
self.0.get(0) // Simplified logic
}
}
Erklärung
1
type Item<'a> where Self: 'a;
Definiert einen assoziierten Typ, der generisch über eine Lebensdauer 'a ist, die vom Aufrufer bestimmt wird.
2
fn next<'a>(&'a mut self)
Die Methodensignatur bindet die Lebensdauer des zurückgegebenen Items an die Ausleihung des Iterators.