【发布时间】:2020-04-07 14:24:08
【问题描述】:
我正在尝试学习 Rust,并决定尝试使用 FLTK crate。但是,我在尝试访问其自己的回调中的按钮时遇到了一些问题,我不知道如何解决它。
use fltk::{app::*, button::*, frame::*, window::*};
fn main() {
let app = App::default();
let mut window = Window::new(100, 100, 400, 300, "Hello world!");
let mut frame = Frame::new(0, 0, 400, 200, "");
let mut button = LightButton::default()
.with_pos(10, 10)
.with_size(80, 40)
.with_label("Clickity");
button.set_callback(Box::new(|| {
println!("Button is {}", button.is_on());
frame.set_label(&format!("{}", button.is_on()))
}));
window.show();
app.set_scheme(AppScheme::Gleam);
app.run().unwrap();
}
导致以下错误:
error[E0502]: cannot borrow `button` as mutable because it is also borrowed as immutable
--> src/main.rs:15:5
|
15 | button.set_callback(Box::new(|| {
| ^ ------------ -- immutable borrow occurs here
| | |
| _____| immutable borrow later used by call
| |
16 | | println!("Button is {}", button.is_on());
| | ------ first borrow occurs due to use of `button` in closure
17 | | frame.set_label(&format!("{}", button.is_on()))
18 | | }));
| |_______^ mutable borrow occurs here
据我了解,我无法在回调中访问button,因为在调用set_callback 方法时我已经将它用作可变对象。我不知道我应该如何解决这个问题。
【问题讨论】:
-
看来Problems with mutability in a closure的答案可能会回答您的问题; Can't borrow mutably within two different closures in the same scope。如果没有,请edit您的问题来解释差异。否则,我们可以将此问题标记为已回答。
-
@Shepmaster 谢谢!通过将 Button 放在 RefCell 中似乎可以工作。
标签: rust borrow-checker fltk