我正在实现一个锈蚀应用程序,其中结构向量将被传递到一个闭包中。
#[derive(Clone, Copy)]
struct AttackInfo {
ppid: usize,
pname: &'static str,
cpu: f32,
}
type AList = Vec<AttackInfo>;
fn Task() {
let mut list: AList = AList::new();
// ...
// I fill up the list with many items
// ...
output.put(|msg| *msg = Some(Message::Value(list)));
}output.put是一个接受闭包的函数,它是由库定义的。
由于list变量的错误,我无法发送list的值:
cannot move out of captured outer variable in an `FnMut` closure闭包将被多次执行,直到列表中的所有值被清空为止。如何在不丢失变量范围的情况下发送列表数据?
发布于 2016-12-02 16:11:28
编写Message::Value(list)时,通过将list传递给Value,您已经消耗了它。可以多次执行FnMut闭包,因此编译器必须假定它将被多次调用。由于您的闭包试图移动list,所以编译器会抱怨,因为不允许您多次将值移出某个位置。
取决于output.put()试图做什么,可能有几种解决方案:
FnOnce。这将允许您像您正在尝试的那样移动list。list进行引用,然后克隆它:
fn Task() {让mut列表: AList = list::new();// . // i用许多项// .Output.put({##*$}}=Some(Message::Value(&list).clone();}https://stackoverflow.com/questions/40936078
复制相似问题