如何将闭包传递给对象安全的特征方法或通过动态调度传递?
我可以自己回答这个问题,但是答案还有些不足:FnOnce
闭包必须装箱,因为它们没有大小,必须在使用时使用(因此不能通过引用传递。)>
fn pass_fn(get_num: &dyn Fn() -> i32) {
let _num = get_num();
}
fn pass_fn_mut(set_num: &mut dyn FnMut(i32)) {
set_num(6);
}
fn pass_fn_once(do_thing: Box<dyn FnOnce()>) {
do_thing();
}
fn main() {
pass_fn(&|| 2);
let mut x = 1;
pass_fn_mut(&mut |y| x = y);
pass_fn_once(Box::new(|| println!("Hello!")));
}
如何将闭包传递给对象安全的特征方法,或者通过动态调度?我可以自己回答这个问题,但是答案却有些不足:FnOnce闭包必须用盒装,因为它们...
FWIW,您可以不带框地传递它: