Rust 用于实现迭代器的代理方法,冲突生存期

Rust 用于实现迭代器的代理方法,冲突生存期,rust,Rust,我试图实现一个迭代器,它只是将next方法代理给结构本身上的另一个方法 struct Element<'a>(&'a str); struct IterStruct<'a> { name: &'a str, } impl<'a> IterStruct<'a> { fn name(&mut self) -> Option<Element> { Some(Element(se

我试图实现一个迭代器,它只是将
next
方法代理给结构本身上的另一个方法

struct Element<'a>(&'a str);

struct IterStruct<'a> {
    name: &'a str,
}

impl<'a> IterStruct<'a> {
    fn name(&mut self) -> Option<Element> {
        Some(Element(self.name))
    }
}

impl<'a> Iterator for IterStruct<'a> {
    type Item = Element<'a>;
    fn next(&mut self) -> Option<Self::Item> {
        self.name()
    }
}
struct元素{
fn名称(&mut self)->选项{
Some(元素(self.name))
}
}
恳求{
类型项=元素src/lib.rs:16:14
|
16 | self.name()
|              ^^^^
|
注意:首先,生命周期不能超过15:5在方法体上定义的匿名生命周期#1。。。
-->src/lib.rs:15:5
|
15 |/fn下一步(&mut self)->选项{
16 | | self.name()
17 | |     }
| |_____^
注意:…这样引用就不会超过借用的内容
-->src/lib.rs:16:9
|
16 | self.name()
|         ^^^^
注意:但是,生存期必须对impl上13:6定义的生存期“a”有效。。。
-->src/lib.rs:13:6
|
13 | impl{
|      ^^
=注意:…以便类型兼容:
应为std::iter::迭代器
找到std::iter::迭代器


如何解决此问题?

一种解决方案是指定
name
IterStruct
更有效,它包含在:

struct Element<'a>(&'a str);

struct IterStruct<'a> {
    name: &'a str,
}

impl<'a> IterStruct<'a> {
    fn name<'s>(&'s mut self) -> Option<Element<'a>>
    where
        'a: 's, // <- specify that name outlives self
    {
        Some(Element(self.name))
    }
}

impl<'a> Iterator for IterStruct<'a> {
    type Item = Element<'a>;
    fn next(&mut self) -> Option<Self::Item> {
        self.name()
    }
}
struct元素{
用于IterStruct的fn名称选项迭代器;
fn下一步(&mut self)->选项{
self.name()
}
}

您需要给借阅检查程序一种推断生命周期的方法。基本上缺少的是以下一行

impl<'a> IterStruct<'a> {
    fn name(&mut self) -> Option<Element> {
//  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        Some(Element(self.name))
    }
}
impl{
fn名称(&mut self)->选项{
//  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some(元素(self.name))
}
}
进入
fn name(&mut self)->选项