0

<Rc<RefCell<T>>由于某种原因,我需要关闭闭包:

  1. 多次引用闭包;
  2. 闭包可以修改环境(内部可变性);
  3. 闭包最好存储为特征对象,因为最终我想将引用放在向量中。

但是,当存储为 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 个要求?

4

0 回答 0