当前位置:  开发笔记 > 后端 > 正文

如何设置盒装闭合捕获`self`的生命周期?

如何解决《如何设置盒装闭合捕获`self`的生命周期?》经验,为你挑选了1个好方法。



1> Francis Gagn..:

你得到一个错误,因为你的闭包收到一个引用self,它本身就是一个引用.但是,由于引用指向局部变量,因此只要函数返回,该引用就会变为无效.

要解决此问题,请move在关闭之前添加关键字.这指示编译器在闭包中移动闭合变量,而不是将对这些变量的引用传递给闭包.

fn occupied_iter_x<'a>(&'a self) -> Box + 'a> {
    Box::new( (0..32).filter(move |&pos| match self.at(pos) { Occupied::Empty => false, _ => true } ) )
}


@BenJackson,如果不使用`move`关键字,闭包将通过引用捕获其环境(在这种情况下,环境将包含对&self的引用,即双引用).如果这样做,它将按值捕获它.这就是Rust的封闭工作方式.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有