你得到一个错误,因为你的闭包收到一个引用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 } ) ) }