相关疑难解决方法(0)

如何将捕获的变量移动到闭包内的闭包中?

此代码是从迭代器生成一组唯一项的低效方法.为了实现这一点,我试图用a Vec来跟踪我所见过的值.我认为这Vec需要由最里面的封闭所拥有:

fn main() {
    let mut seen = vec![];
    let items = vec![vec![1i32, 2], vec![3], vec![1]];

    let a: Vec<_> = items
        .iter()
        .flat_map(move |inner_numbers| {
            inner_numbers.iter().filter_map(move |&number| {
                if !seen.contains(&number) {
                    seen.push(number);
                    Some(number)
                } else {
                    None
                }
            })
        })
        .collect();

    println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)

但是,编译失败了:

error[E0507]: cannot move out of captured outer variable in an `FnMut` closure
 --> src/main.rs:8:45
  |
2 |     let mut seen = vec![];
  |         -------- captured outer variable
...
8 |             inner_numbers.iter().filter_map(move …
Run Code Online (Sandbox Code Playgroud)

closures rust

21
推荐指数
2
解决办法
9285
查看次数

将非复制变量移动到异步闭包中:捕获的变量无法转义 `FnMut` 闭包主体

我试图让clokwerk安排一个异步函数每 X 秒运行一次。

文档显示了这个例子:

// Create a new scheduler
let mut scheduler = AsyncScheduler::new();
// Add some tasks to it
scheduler
    .every(10.minutes())
        .plus(30.seconds())
    .run(|| async { println!("Simplest is just using an async block"); });
// Spawn a task to run it forever
tokio::spawn(async move {
  loop {
    scheduler.run_pending().await;
    tokio::time::sleep(Duration::from_millis(100)).await;
  }
});
Run Code Online (Sandbox Code Playgroud)

我的初步尝试:

    let config2 = // define a Config struct, Config
    let pg_pool2 = // get a sqlx connection pool, Pool<Postgres>

    //I assume I need shared references …
Run Code Online (Sandbox Code Playgroud)

closures rust

4
推荐指数
1
解决办法
94
查看次数

标签 统计

closures ×2

rust ×2