<Rc<RefCell<T>>
由于某种原因,我需要关闭闭包:
- 多次引用闭包;
- 闭包可以修改环境(内部可变性);
- 闭包最好存储为特征对象,因为最终我想将引用放在向量中。
但是,当存储为 trait 对象时,闭包变得不可用。
这是一个例子。简单地说,变量closure
不会改变环境。在我自己的用例中,我确实需要 mutate 环境。
type Handler = FnMut(&mut u32);
let closure: rc::Rc<cell::RefCell<Handler>> = rc::Rc::new(cell::RefCell::new(|x: &mut u32|{
// would work if above line is:
// let closure: = rc::Rc::new(cell::RefCell::new(|x: &mut u32|{
*x = 3;
}));
let mut y = 0u32;
let cc = closure.borrow_mut();
cc(&mut y);
我知道如果我删除变量上的类型约束它会起作用closure
。但是那样我就失去了在 vec.xml 中放置类似闭包的能力。
有没有办法在后面使用闭包<Rc<RefCell<T>>
?或者是否有其他替代方案可以满足我列出的 3 个要求?