【发布时间】:2015-08-04 13:05:04
【问题描述】:
我创建了一个最小示例来说明我无法解决的类型推断问题。
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);
我查看了有关需要类型注释的其他问题,但这似乎是涉及关联类型的特殊情况。
【问题讨论】:
-
在您的真实案例中需要
'a吗?删除它并允许生命周期推断可以编译代码。 -
是的,我需要一生。我的代码在没有生命周期的情况下工作,但我必须添加它,然后代码停止编译,因为我问了这个问题。感谢您的帮助。
标签: rust