【发布时间】:2021-12-16 06:36:35
【问题描述】:
我正在尝试使用 2 个结构在 Rust 中重新创建一个简单的回调模式。只要另一个准备好,一个就会传递一些逻辑来执行。这里的问题是,只有当结构中的某个值为真时,逻辑才会运行。
我可以理解为什么在这种情况下对 Foo 的引用需要为 'static 存在,但我不确定如何重构以便编译。
似乎是一个非常常规的用例,但也许我错过了一些东西,因为我是 Rust 的新手。
struct Foo {
value: bool,
}
struct Bar {
closure: Box<dyn Fn() -> ()>,
}
impl Foo {
fn new() -> Self {
Foo {
value: false,
}
}
fn set_closure(&self, b: &mut Bar) {
b.closure = self.get_closure();
}
fn get_closure(&self) -> Box<dyn Fn() -> ()> {
return Box::new(|| {
if self.value {
println!("true");
} else {
println!("false");
}
});
}
}
impl Bar {
fn new() -> Self {
Bar {
closure: Box::new(|| {})
}
}
}
fn main() {
let foo = Foo::new();
let mut bar = Bar::new();
foo.set_closure(&mut bar);
let closure = bar.closure;
closure();
}
游乐场链接 -> here
【问题讨论】:
标签: struct rust closures lifetime