我有一个这样的场景:
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或其他方式无法在异步作用域中使用?