如何减少封闭的寿命?
我试图创建一个方法,该方法返回与self相关的迭代器。我不想制作新的结构或其他东西,所以我只是使其返回过滤器和地图,并遇到了一些借阅检查器错误。
以下代码是我的第一次尝试。
Choropleth
以下代码重复了我的问题。
fn f<'b>(&'b self) -> impl Iterator<Item = u8> {
(0..self.some_number())
.filter(|&i| self.some_bool_function(i))
.map(|i| i as u8)
}
或更短
struct A(bool);
impl A {
fn f<'a>(&'a self) -> impl Iterator<Item = u8> + 'a {
(0..1).filter(|&i| self.0)
}
}
这不会编译,因为闭包可能会超出自我。我不知道如何在不动自己的情况下完成这项工作。
答案 0 :(得分:0)
如果返回闭包,则必须确保闭包具有所需的一切-甚至在返回 之后(即,从堆栈中弹出(临时)函数参数之后)。
因此,我想您想move
返回到闭包中的内容:
impl A {
fn f<'a>(&'a self) -> impl Iterator<Item = u8> + 'a {
(0..1).filter(move |&i| self.0)
}
}
响应
fn g<'a>(t:&'a ()) -> impl 'a + FnMut() {
move || *t
}
响应(扩展您的第一个示例):
struct A(bool);
impl A {
fn some_number(&self) -> usize {
6
}
fn some_bool_function(&self, i: usize) -> bool {
i%2==0
}
fn f<'b>(&'b self) -> impl Iterator<Item = u8> + 'b {
(0..self.some_number())
.filter(move |&i| self.some_bool_function(i))
.map(|i| i as u8)
}
}