Rust:异步作用域与非异步作用域

时间:2020-08-25 11:00:30

标签: rust async-await

我有一个这样的场景:

struct Instance {

    id: Option<String>,
}

struct Context {
    instances: Vec<Instance>,
}

impl Context {
    async fn filter_async(&self) -> Vec<String> {
        self.instances.iter().filter_map(|x|x.id).collect()
    }

    fn filter(&self) -> Vec<String> {
        self.instances.iter().filter_map(|x| x.id).collect()
    }
}

带有错误消息:

 --> src/main.rs:41:46
   |
41 |         self.instances.iter().filter_map(|x| x.id).collect()
   |                                              ^^^^
   |                                              |
   |                                              move occurs because `x.id` has type `std::option::Option<std::string::String>`, which does not implement the `Copy` trait
   |                                              help: consider borrowing the `Option`'s content: `x.id.as_ref()`

我试图弄清楚这是什么意思。过滤器功能可以正常工作,但是使用异步功能会产生错误消息。

我很好奇这里发生的事情。在异步函数中,它希望能够复制x.id,但是可以通过.clone()解决。 这是否意味着非异步功能使用了某种形式的memcpy或其他方式无法在异步作用域中使用?

0 个答案:

没有答案