这个例子来自rust的错误索引,我仍然无法理解为什么会出现这种情况
#![allow(unused)]
fn main() {
pub trait Foo<T> {
type A;
fn get(&self, t: T) -> Self::A;
}
fn foo2<I: for<'x> Foo<&'x isize>>(field: I::A) {} // error!
}
I
在foo2()
中没有实现Foo
一次。它多次实现,在'x
的每个生命周期中实现一次。
因此,<I as Foo>::A
也没有一个值。有多个实例,每个实例对应一个'x
。
当您想要指定I::A
时,您需要告诉编译器哪个I::A
,也就是说,用哪个生存期绑定'x
。