Тема: Передача параметру self зі структури до замикання(closure)
Як передати параметр self всередину замикання?
Ось код, де я хочу зафіксувати зміну стану Checkbox в налаштуваннях:
let show_history_default_state: bool =
self.settings.boolean("is-search-history-shown");
let show_search_history = gio::ActionEntry::builder("show_search_history")
//Створення стану(state) необхідне для того, щоб з'явилася галочка Checkbox
.state(show_history_default_state.to_variant())
//Дія прив'язується до змінної action, відстежується за її допомогою
//і перезаписується
.activate( |_, action, _| {
let state = action.state().unwrap();
let action_state: bool = state.get().unwrap();
let new_state = !action_state; // Натискання на Checkbox
action.set_state(&new_state.to_variant());
self.settings
.set_boolean("is-search-history-shown", new_state)
.expect("Could not set setting.");
println!("Показати історію натиснуто")
})
.build();
Ось таку помилку видає:
error[E0521]: borrowed data escapes outside of method
--> src/main_window.rs:60:35
|
24 | fn create_actions_entries(&self){
| -----
| |
| `self` is a reference that is only valid in the method body
| let's call the lifetime of this reference `'1`
...
60 | let show_search_history = gio::ActionEntry::builder("show_search_history")
| ___________________________________^
61 | | //Створення стану(state) необхідне для того, щоб з'явилася галочка Checkbox
62 | | .state(show_history_default_state.to_variant())
63 | | //Дія прив'язується до змінної action, відстежується за її допомогою
... |
74 | | println!("Показати історію натиснуто")
75 | | })
| | ^
| | |
| |__________________`self` escapes the method body here
| argument requires that `'1` must outlive `'static`
Розумію, що треба щось на зразок weak pointer, але не знаю як зробити.