我对 rust 很陌生,尝试使用 rust 和 wasm-bindgen 制作一个带有 web 组件的小游戏。我有一个事件监听器,它监听按键,并通过流返回一个方向。然后我想根据方向变量的值每 500 毫秒向画布元素绘制一些东西。
我的问题是我无法direction
从异步块中改变变量,并在 Interval 闭包中使用它。
在 async 块和 Interval 闭包中使用move
关键字可以编译代码,但是方向在间隔函数内永远不会改变。我认为方向变量然后被复制到块/闭包中,因为Direction
枚举实现了Copy
特征。
我已经包含了我的入口点函数的简化版本:
#[wasm_bindgen]
pub fn run() -> Result<(), JsValue> {
let mut direction = Direction::Right;
let fut = async {
let mut on_key_down = EventListenerStruct::new();
while let Some(dir) = on_key_down.next().await {
direction = dir;
// ^^^^^^^^ this errors because direction does not live long enough
// argument requires that `direction` is borrowed for `static`
}
};
spawn_local(fut);
Interval::new(500, || {
// I want to use direction here
})
.forget();
Ok(())
}
我的问题是;我可以将变量可变地借入异步块吗?我可以在不拥有它的情况下让它活得足够长吗?
提前致谢,