首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构复制向量

结构复制向量
EN

Stack Overflow用户
提问于 2016-12-02 15:49:24
回答 1查看 140关注 0票数 0

我正在实现一个锈蚀应用程序,其中结构向量将被传递到一个闭包中。

代码语言:javascript
复制
#[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的值:

代码语言:javascript
复制
cannot move out of captured outer variable in an `FnMut` closure

闭包将被多次执行,直到列表中的所有值被清空为止。如何在不丢失变量范围的情况下发送列表数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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();}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40936078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档