rust traits关联类型上的生存期注解的混淆

rjee0c15  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(133)

当我试图为一个有生命周期的引用类型实现一些trait时,我发现下面的code在关联类型R未注解时无法编译,但在删除它时编译。

trait Foo {
    // type R;
    fn foo(&mut self);
}

struct B;

impl<'a> Foo for B
where
    &'a B: 'a,
{
    // type R = &'a u8;
    fn foo(&mut self) {
        println!("=====");
    }
}
fn main() {
    let b = &mut B;
    b.foo();
}

where子句的含义是什么?
此外,当我试图取消注解代码,然后编译器抱怨E0207,为什么没有编译器错误的前一段代码?

q9yhzks0

q9yhzks01#

如果没有更多的上下文,代码看起来就像是在试图解决缺少泛型关联类型的问题。由于它们在Rust 1.65中可用,因此您可以删除where子句并向R关联类型添加通用生命周期参数。

trait Foo {
    type R<'a>;
    fn foo(&mut self);
}

struct B;

impl Foo for B
{
    type R<'a> = &'a u8;
    fn foo(&mut self){println!("=====");}
}

fn main() {
    let b = &mut B;
    b.foo();
}

相关问题