我对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();
可能有人可以在这里帮助我:)
欢呼
答案 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()
。那是不可能的。它要么在内部移动,要么在外部。要解决该问题,您可以将其包装在一个结构中,该结构允许存在多个指向它的指针(Arc
或Rc
是主要候选对象),如果我正确,并且{{1} }要求start()
,您需要一种保证内部可变性的结构(&mut self
,Mutex
或RwLock
是其中的一些候选者),以便您临时获取可变的参考