【发布时间】:2021-03-10 11:42:38
【问题描述】:
我想创建一个可以访问参数instanceContext 的回调函数,但我不确定如何修复代码。
失败的代码是instanceContext.instances.len()。
我尝试过使用生命周期、移动、Rc、Arc、Box、RefCell,但似乎没有任何效果。
目标是拥有多个实例,这些实例将具有回调,使一个实例可以通过 InstanceContext 调用/修改另一个实例。
在我的实验过程中,我遇到了以下错误:
- 可能比借来的价值更长
- 借用价值的寿命不够长
- 闭包是
FnOnce,因为它移动了变量 - 这个闭包实现
FnOnce,而不是Fn
use wasmtime::*;
struct InstanceContext {
id: i32,
instances: Vec<Instance>,
}
fn main() {
let store = Store::new(&Engine::default());
let mut instanceContext = InstanceContext { id: 5, instances: Vec::new() };
let _callback = createCallback(&store, &mut instanceContext);
}
fn createCallback(store: &Store, instanceContext: &mut InstanceContext) -> wasmtime::Func {
let f = Func::wrap(&store, || {
println!("Number of instances: {}", instanceContext.instances.len());
});
f
}
【问题讨论】: