我想让一个函数在多个线程间共享,还需要能够对该函数使用另一个函数进行调用:
fn main() {
let on_virtual_tun_write = std::sync::Arc::new(|f: &dyn FnOnce(&mut [u8]), size: usize|-> std::result::Result<(),()>{
let mut buffer = vec![0; size];
f(buffer.as_mut_slice());
Ok(())
});
}
调用这个函数后,它使用传递的 f
参数来检索缓冲区。正如您所看到的,我不打算复制这个函数,我只是在有人调用闭包时立即使用它并丢弃它。然而,Rust 认为我想要复制它。我该怎么告诉 Rust 我只想使用对该函数的引用?我认为 &dyn
足够了。
错误:
error[E0161]: cannot move a value of type dyn for<'r> FnOnce(&'r mut [u8]): the size of dyn for<'r> FnOnce(&'r mut [u8]) cannot be statically determined
--> src/main.rs:4:9
|
4 | f(buffer.as_mut_slice());
| ^
error[E0507]: cannot move out of `*f` which is behind a shared reference
--> src/main.rs:4:9
|
4 | f(buffer.as_mut_slice());
| ^ move occurs because `*f` has type `dyn for<'r> FnOnce(&'r mut [u8])`, which does not implement the `Copy` trait
error: aborting due to 2 previous errors; 1 warning emitted
fn main() { let ff = |f: &dyn FnOnce()| { f(); }; }
,并且仍然会得到基本相同的错误信息。 - Michael Anderson