我想實現一個容器,其中包含一個GUI小部件列表,每個小部件需要訪問該容器。每個小部件可能需要修改某些事件上的其他小部件。例如,當用戶點擊按鈕時,編輯器文本將被更新。我怎樣纔能有一個容器的物品可以訪問容器?
我可以使用盒裝的HashMap
但它不能解決問題。什麼是最簡單的方法來實現我所需要的?
這是我現在有,它不會編譯,但你會得到的想法:
use std::collections::HashMap;
struct SharedItem<'a> {
pub value: String,
pub store: &'a HashMap<String, SharedItem<'a>>,
}
fn trigger_button(button: &SharedItem) {
// use case where SharedItem has to be mutable
let mut editor = button.store.get(&"editor".to_string()).unwrap();
editor.value = "value inserted by button".to_string();
}
fn main() {
// map shared items by their name
let mut shared_store: HashMap<String, SharedItem> = HashMap::new();
// create components
let editor = SharedItem {
value: "editable content".to_string(),
store: &shared_store,
};
let button = SharedItem {
value: "button".to_string(),
store: &shared_store,
};
shared_store.insert("button".to_string(), button);
shared_store.insert("editor".to_string(), editor);
// now update the editor by triggering button
trigger_button(shared_store.get(&"button".to_string()).unwrap());
}
這將是[此問題]的副本(http://stackoverflow.com/questions/32300132/why-cant-i-store-a-value-and-a-reference-to-that- value-in-the-the-struct) – Shepmaster
@Shepmaster是的,它是同一個問題的變體,但它沒有解決方案,我想知道如何解決它。主要要求是從存儲器內的物品訪問存儲結構。 – insanebits
http://stackoverflow.com/questions/27001067/how-can-i-make-a-structure-with-internal-references/27011347#27011347實際上更接近。特別是因爲它有這個問題的答案:使用引用計數框 –