使用Rc
示例代码:
use std::{rc::Rc, cell::RefCell};
struct ClosureStruct {
closure: Rc>>>,
}
fn main() {
let closure_struct = ClosureStruct {
closure: Rc::new(RefCell::new(None)),
};
{
let closure_struct = &closure_struct;
let closure = || {
println!("Hello from closure!");
};
let closure_box = Box::new(closure);
*closure_struct.closure.borrow_mut() = Some(closure_box);
}
let stored_closure = closure_struct.closure.borrow().clone().unwrap();
stored_closure();
}
在这个示例中,创建了一个包含闭包的结构体ClosureStruct
。该结构体中有一个Rcclosure
,它可以存储一个可以被捕获的闭包。在使用闭包之前,需要先将其存储在closure
字段中,这样就可以超出当前函数生命周期时仍然可以访问它。要访问闭包,只需使用borrow()
方法获取RefCell
的不可变借用并使用clone()
方法获取可调用的闭包。