gpt4 book ai didi

rust - 在关联类型和迭代器的上下文中需要类型注释

转载 作者:行者123 更新时间:2023-11-29 07:45:37 26 4
gpt4 key购买 nike

我创建了一个最小示例来说明我无法解决的类型推断问题。

trait A<'a> {
type Item: Copy;
type Iter: Iterator<Item=Self::Item>;

fn items(&'a self) -> Self::Iter;

fn consume(&'a self, i: Self::Item) -> Self::Item;

fn f(&'a self) {
let _ = self.items().map(|i| self.consume(i) as Self::Item);
}
}

编译错误是

x.rs:10:30: 10:68 error: type annotations required: cannot resolve `<<Self as A<'_>>::Iter as core::iter::Iterator>::Item == _` [E0284]
x.rs:10 let _ = self.items().map(|i| self.consume(i) as Self::Item);

我看过其他关于需要类型注释的问题,但这似乎是涉及关联类型的特殊情况。

最佳答案

我认为这是 #24338 ,并且是由于编译器对特征和关联类型的生命周期感到困惑而引起的。它可以通过将 f 方法的主体移动到一个单独的函数中来解决(嵌套计数是分开的,因为它们是独立类型检查的):

trait A<'a> {
// ...

fn f(&'a self) {
f_body(self);

fn f_body<'a, T: ?Sized + A<'a>>(x: &'a T) {
let _ = x.items().map(|i| x.consume(i) as T::Item);
}
}
}

关于rust - 在关联类型和迭代器的上下文中需要类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31810168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com