我想创建一个回调函数,它可以访问参数instanceContext,但我不知道如何修复代码。失败的代码是instanceContext.instances.len()。
我试过使用有生之年,移动,Rc,弧,盒,RefCell,但似乎没有什么工作。
目标是拥有多个实例,这些实例将具有回调,从而使一个实例能够通过InstanceContext调用/修改另一个实例。
在我的实验中,我得到了以下错误:
Fn
FnOnce,因为它移动了变量FnOnce,而不是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
}发布于 2020-11-27 18:32:03
您没有提供编译器错误消息或实际的再现情况,因此很难知道仅仅考虑事物所完成的诊断是否正确,但在我看来,这将是解决方案:
fn main() {
let store = Store::new(&Engine::default());
let mut instanceContext = Rc::new(RefCell::new(InstanceContext { id: 5, instances: Vec::new() }));
let _callback = createCallback(&store, instanceContext.clone());
}
fn createCallback(store: &Store, instanceContext: Rc<RefCell<InstanceContext>>) -> wasmtime::Func {
let f = Func::wrap(&store, move || {
println!("Number of instances: {}", instanceContext.borrow().instances.len());
});
f
}https://stackoverflow.com/questions/65041598
复制相似问题