问题与以下内容不起作用的原因相同:
fn f() -> dyn Iterator<Item = usize> {
0..10
}
您试图返回的内容的大小在编译时未知。如果是常规的
fn
,然后您可以替换
dyn
具有
impl
(or return position impl trait)
一切都会好起来的。然而,由于您处理的是闭包,所以事情会变得有点复杂。你需要把它装箱。
use std::sync::{Arc, Mutex};
let f: Arc<Mutex<Box<dyn Fn() -> Box<dyn Iterator<Item = usize>>>>> =
Arc::new(Mutex::new(Box::new(|| Box::new((0..10).into_iter()))));
let mut guard = f.lock().unwrap();
let f = guard.as_mut();
for x in f() {
println!("{}", x);
}
记得保存返回的警卫
.lock()
。否则,编译器将抱怨一个临时的在使用中被释放。