无法移出`Fn`闭包中的捕获变量

时间:2019-09-14 12:40:04

标签: rust

我对rust-lang非常陌生。我正在尝试创建我的第一个程序,但是我对rust-lang的所有权/借款感到迷茫。

那是我的代码:

let core: PackageCore = package_core::init();
let html = include_str!("./html/index.html");

rouille::start_server("0.0.0.0:44", move |request| {
    core.send_command();
    return Response::html(html.clone());
});

core.start();

那是我的错误: enter image description here

可能有人可以在这里帮助我:)

欢呼

1 个答案:

答案 0 :(得分:0)

我已经指出了您的代码段中的问题所在

let core: PackageCore = package_core::init();
let html = include_str!("./html/index.html");

rouille::start_server("0.0.0.0:44", move |request| {
    core.send_command(); // <-- this is where you moved
    return Response::html(html.clone());
});

core.start(); // <-- but you need it here outside of the closure

您在闭包内move core,但是在其外调用start()。那是不可能的。它要么在内部移动,要么在外部。要解决该问题,您可以将其包装在一个结构中,该结构允许存在多个指向它的指针(ArcRc是主要候选对象),如果我正确,并且{{1} }要求start(),您需要一种保证内部可变性的结构(&mut selfMutexRwLock是其中的一些候选者),以便您临时获取可变的参考