Reference 为什么';它不是为结构编译的trait实现,而是为结构的引用编译的?

Reference 为什么';它不是为结构编译的trait实现,而是为结构的引用编译的?,reference,rust,traits,Reference,Rust,Traits,要回答我前面的一个问题(), 这段代码是给我的: pub特征向量{ 类型项目; Iter型:迭代器; //几种功能 fn国际热核聚变实验堆(&self)->self::国际热核聚变实验堆; } 发布结构向量实现1{ 编号:Vec, } impl; fn iter(&self)->self::iter{ self.numbers.iter() } } fn main(){} 我看到trait是为struct的引用实现的,如果我只使用struct,它就不会编译。有人能解释一下原因吗?正如编译器错误

要回答我前面的一个问题(), 这段代码是给我的:

pub特征向量{
类型项目;
Iter型:迭代器;
//几种功能
fn国际热核聚变实验堆(&self)->self::国际热核聚变实验堆;
}
发布结构向量实现1{
编号:Vec,
}
impl;
fn iter(&self)->self::iter{
self.numbers.iter()
}
}
fn main(){}

我看到trait是为struct的引用实现的,如果我只使用struct,它就不会编译。有人能解释一下原因吗?

正如编译器错误所提到的,这里的问题是,如果像这样实现,生命周期
'a
没有理由存在:

impl<'a, T> Vector for VectorImplementation1<T> {
    /**/
}
impl src/main.rs:13:6
|
13 | impl Self::Iter;
}
发布结构向量实现1{
编号:Vec,
}
impl向量自::Iter{
self.numbers.iter()
}
}
impl向量;
fn iter(&'a self)->self::iter{
self.numbers.iter()
}
}

在本例中,我们将生存期移动到trait,以便trait可以“使用”生存期,从而验证trait实现的使用。但正如我前面提到的,这增加了需要了解与此特征相关的生命周期的复杂性,从而降低了可读性。

我相信您的问题可以通过和/或的答案得到回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;DR-如果您使用
self
并执行了
impl Vector for vectoryimplementation 1
,则该向量将超出范围,且引用永远无效。如果您使用
&self
并执行了
impl Vector for vectorimplementation 1
,那么您将试图将返回值的引用与无法命名的生存期联系起来。
pub trait Vector<'a> {
    type Item: 'a;
    type Iter: Iterator<Item = Self::Item> + 'a;

    // several functions
    fn iter(&'a self) -> Self::Iter;
}

pub struct VectorImplementation1<T> {
    numbers: Vec<T>,
}

impl<'a, T: 'a> Vector<'a> for VectorImplementation1<T> {
    type Item = &'a T;
    type Iter = std::slice::Iter<'a, T>;

    fn iter(&'a self) -> Self::Iter {
        self.numbers.iter()
    }
}

impl<'a, T: 'a> Vector<'a> for &'a VectorImplementation1<T> {
    type Item = &'a T;
    type Iter = std::slice::Iter<'a, T>;

    fn iter(&'a self) -> Self::Iter {
        self.numbers.iter()
    }
}