泛型关联类型(GAT)的范式革命:表达高阶类型关系
GAT允许关联类型带有泛型参数,本教程教你如何用GAT实现迭代器工厂、借用模式抽象和类型级别计算。 · 难度:入门 · +10XP
泛型关联类型(GAT)的范式革命:表达高阶类型关系
稳定版GAT让你能在trait中定义类似type Item<'a>的关联类型,从而表达出生命周期依赖的高阶关系。本教程将构建一个LendingIterator trait(逐元素借用),并展示如何用它来实现一个安全的内存池。还会讲解GAT与普通关联类型在协变上的差异,以及如何用GAT模拟HKT(高阶类型)。
trait LendingIterator {
type Item<'a> where Self: 'a;
fn next<'a>(&'a mut self) -> Option>;
}
struct SliceIter<'a, T> {
slice: &'a [T],
index: usize,
}
impl<'a, T> LendingIterator for SliceIter<'a, T> {
type Item<'b> = &'b T where Self: 'b;
fn next<'b>(&'b mut self) -> Option> {
let item = self.slice.get(self.index)?;
self.index += 1;
Some(item)
}
}